const char kResWgt[] = "res/wgt";
const char kConfigFileName[] = "config.xml";
+void FreeMetadataList(gpointer data)
+{
+ metadata_x* metadata = reinterpret_cast<metadata_x*>(data);
+ if (metadata) {
+ if (metadata->key)
+ free(const_cast<char*>(metadata->key));
+ if (metadata->value)
+ free(const_cast<char*>(metadata->value));
+ free(metadata);
+ }
+}
+
GList* GenerateMetadataListX(const wgt::parse::MetaDataInfo& meta_info) {
GList* list = nullptr;
for (auto& meta : meta_info.metadata()) {
metadata_x* new_meta =
static_cast<metadata_x*>(calloc(1, sizeof(metadata_x)));
+ if (!new_meta) {
+ g_list_free_full(list, &FreeMetadataList);
+ return nullptr;
+ }
new_meta->key = strdup(meta.first.c_str());
if (!meta.second.empty())
new_meta->value = strdup(meta.second.c_str());
for (auto& meta : metadata) {
metadata_x* new_meta =
static_cast<metadata_x*>(calloc(1, sizeof(metadata_x)));
+ if (!new_meta)
+ return nullptr;
new_meta->key = strdup(meta.first.c_str());
if (!meta.second.empty())
new_meta->value = strdup(meta.second.c_str());
void AppendLabel(T* root, const std::string& label,
const std::string& locale) {
label_x* label_item = reinterpret_cast<label_x*>(calloc(1, sizeof(label_x)));
+ if (!label_item)
+ return;
label_item->name = strdup(label.c_str());
label_item->text = strdup(label.c_str());
label_item->lang = !locale.empty() ?
found_locales.insert(locale);
icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
+ if (!icon)
+ return false;
bf::path icon_path = context_->root_application_path.get()
/ app_info->package() / "res" / "wgt" / application_icon.path();
icon->text = strdup(icon_path.c_str());
for (auto& item : wgt_info->description_set()) {
description_x* description = reinterpret_cast<description_x*>
(calloc(1, sizeof(description_x)));
+ if (!description)
+ return false;
description->text = strdup(item.second.c_str());
description->lang = !item.first.empty() ?
strdup(item.first.c_str()) : strdup(DEFAULT_LOCALE);
}
author_x* author = reinterpret_cast<author_x*>(calloc(1, sizeof(author_x)));
+ if (!author)
+ return false;
if (!wgt_info->author().empty())
author->text = strdup(wgt_info->author().c_str());
if (!wgt_info->author_email().empty())
// application data
application_x* application = reinterpret_cast<application_x*>(
calloc(1, sizeof(application_x)));
+ if (!application)
+ return false;
application->component_type =
has_watch_category ? strdup("watchapp") : strdup("uiapp");
application->mainapp = strdup("true");
application->launch_mode = strdup(app_info->launch_mode().c_str());
for (auto& icon : GListRange<icon_x*>(manifest->icon)) {
icon_x* app_icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
+ if (!app_icon)
+ return false;
app_icon->text = strdup(icon->text);
app_icon->lang = strdup(icon->lang);
application->icon = g_list_append(application->icon, app_icon);
for (auto& service_info : service_list->services) {
application_x* application = reinterpret_cast<application_x*>
(calloc(1, sizeof(application_x)));
+ if (!application)
+ return false;
application->component_type = strdup("svcapp");
application->mainapp = strdup("false");
application->appid = strdup(service_info.id().c_str());
bf::path icon_path = context_->root_application_path.get()
/ manifest->package / "res" / "wgt" / service_info.icon();
icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
+ if (!icon)
+ return false;
icon->text = strdup(icon_path.c_str());
icon->lang = strdup(DEFAULT_LOCALE);
application->icon = g_list_append(application->icon, icon);
for (auto& pair : service_info.metadata_set()) {
metadata_x* item = reinterpret_cast<metadata_x*>(
calloc(1, sizeof(metadata_x)));
+ if (!item)
+ return false;
item->key = strdup(pair.first.c_str());
if (!pair.second.empty())
item->value = strdup(pair.second.c_str());
for (auto& app_widget : appwidget_info->app_widgets()) {
application_x* application = reinterpret_cast<application_x*>
(calloc(1, sizeof(application_x)));
+ if (!application)
+ return false;
application->component_type = strdup("widgetapp");
application->mainapp = strdup("false");
application->appid = strdup(app_widget.id.c_str());
if (!app_widget.icon_src.empty()) {
icon_x* icon = reinterpret_cast<icon_x*>(calloc(1, sizeof(icon_x)));
+ if (!icon)
+ return false;
icon->text = strdup(app_widget.icon_src.c_str());
icon->lang = strdup(DEFAULT_LOCALE);
application->icon = g_list_append(application->icon, icon);
for (const auto& control : app_info_list->controls) {
appcontrol_x* app_control =
static_cast<appcontrol_x*>(calloc(1, sizeof(appcontrol_x)));
+ if (!app_control)
+ return false;
app_control->operation = strdup(control.operation().c_str());
app_control->mime = strdup(control.mime().c_str());
app_control->uri = strdup(control.uri().c_str());
for (auto& priv : privileges) {
privilege_x* privilege =
reinterpret_cast<privilege_x*>(calloc(1, sizeof(privilege_x)));
+ if (!privilege)
+ return false;
privilege->type = strdup(common_installer::kWebPrivilegeType);
privilege->value = strdup(priv.c_str());
manifest->privileges = g_list_append(manifest->privileges, privilege);
manifest_x* manifest =
static_cast<manifest_x*>(calloc(1, sizeof(manifest_x)));
+ if (!manifest)
+ return common_installer::Step::Status::ERROR;
if (!FillManifestX(manifest)) {
LOG(ERROR) << "[Parse] Storing manifest_x failed. "
<< parser_->GetErrorMessage();