diff options
author | Richard Hughes <richard@hughsie.com> | 2016-01-21 20:11:00 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2016-01-22 18:48:45 +0000 |
commit | f3306629a1863dae3a03716f277952b8c65cfa9d (patch) | |
tree | bba2bb1395bc44a40cfb134a98c637e8dde27d9e | |
parent | b7acc0361c6a2b14bdfe14cd2a84941f0f50d099 (diff) | |
download | appstream-glib-f3306629a1863dae3a03716f277952b8c65cfa9d.tar.gz |
Reject an invalid project group when parsing
-rw-r--r-- | libappstream-builder/plugins/asb-plugin-appdata.c | 12 | ||||
-rw-r--r-- | libappstream-glib/as-app-private.h | 2 | ||||
-rw-r--r-- | libappstream-glib/as-app-validate.c | 18 | ||||
-rw-r--r-- | libappstream-glib/as-app.c | 11 |
4 files changed, 18 insertions, 25 deletions
diff --git a/libappstream-builder/plugins/asb-plugin-appdata.c b/libappstream-builder/plugins/asb-plugin-appdata.c index de59a11..ca7c07e 100644 --- a/libappstream-builder/plugins/asb-plugin-appdata.c +++ b/libappstream-builder/plugins/asb-plugin-appdata.c @@ -158,18 +158,6 @@ asb_plugin_process_filename (AsbPlugin *plugin, return FALSE; } - /* check project group */ - tmp = as_app_get_project_group (AS_APP (app)); - if (tmp != NULL) { - if (!as_utils_is_environment_id (tmp)) { - asb_package_log (asb_app_get_package (app), - ASB_PACKAGE_LOG_LEVEL_WARNING, - "AppData project group invalid, " - "so ignoring: %s", tmp); - as_app_set_project_group (AS_APP (app), NULL); - } - } - /* log updateinfo */ tmp = as_app_get_update_contact (AS_APP (app)); if (tmp != NULL) { diff --git a/libappstream-glib/as-app-private.h b/libappstream-glib/as-app-private.h index eeaec3b..dad833a 100644 --- a/libappstream-glib/as-app-private.h +++ b/libappstream-glib/as-app-private.h @@ -49,6 +49,7 @@ G_BEGIN_DECLS * @AS_APP_PROBLEM_TRANSLATED_LICENSE: The <license> value was translated * @AS_APP_PROBLEM_TRANSLATED_PROJECT_GROUP: The <project_group> value was translated * @AS_APP_PROBLEM_UPDATECONTACT_FALLBACK: The file used <updatecontact> without a space + * @AS_APP_PROBLEM_INVALID_PROJECT_GROUP: Invalid project group detected * * The application problems detected when loading. **/ @@ -67,6 +68,7 @@ typedef enum { AS_APP_PROBLEM_TRANSLATED_LICENSE = 1 << 10, AS_APP_PROBLEM_TRANSLATED_PROJECT_GROUP = 1 << 11, AS_APP_PROBLEM_UPDATECONTACT_FALLBACK = 1 << 12, + AS_APP_PROBLEM_INVALID_PROJECT_GROUP = 1 << 13, /*< private >*/ AS_APP_PROBLEM_LAST } AsAppProblems; diff --git a/libappstream-glib/as-app-validate.c b/libappstream-glib/as-app-validate.c index bce8f13..445ccbe 100644 --- a/libappstream-glib/as-app-validate.c +++ b/libappstream-glib/as-app-validate.c @@ -1239,17 +1239,6 @@ as_app_validate (AsApp *app, AsAppValidateFlags flags, GError **error) } } - /* project_group */ - tmp = as_app_get_project_group (app); - if (tmp != NULL) { - if (!as_utils_is_environment_id (tmp)) { - ai_app_validate_add (&helper, - AS_PROBLEM_KIND_TAG_INVALID, - "<project_group> is not valid [%s]", - tmp); - } - } - /* pkgname */ if (as_app_get_pkgname_default (app) != NULL && as_app_get_source_kind (app) == AS_APP_SOURCE_KIND_METAINFO) { @@ -1325,6 +1314,13 @@ as_app_validate (AsApp *app, AsAppValidateFlags flags, GError **error) } } + /* check invalid values */ + if ((problems & AS_APP_PROBLEM_INVALID_PROJECT_GROUP) > 0) { + ai_app_validate_add (&helper, + AS_PROBLEM_KIND_TAG_INVALID, + "<project_group> is not valid"); + } + /* check for things that have to exist */ if (as_app_get_id (app) == NULL) { ai_app_validate_add (&helper, diff --git a/libappstream-glib/as-app.c b/libappstream-glib/as-app.c index d3e78f9..82d3073 100644 --- a/libappstream-glib/as-app.c +++ b/libappstream-glib/as-app.c @@ -1521,6 +1521,14 @@ as_app_set_project_group (AsApp *app, const gchar *project_group) return; } + /* check value */ + if (priv->trust_flags != AS_APP_TRUST_FLAG_COMPLETE) { + if (!as_utils_is_environment_id (project_group)) { + priv->problems |= AS_APP_PROBLEM_INVALID_PROJECT_GROUP; + return; + } + } + g_free (priv->project_group); priv->project_group = g_strdup (project_group); } @@ -3512,8 +3520,7 @@ as_app_node_parse_child (AsApp *app, GNode *n, AsAppParseFlags flags, priv->problems |= AS_APP_PROBLEM_TRANSLATED_PROJECT_GROUP; break; } - g_free (priv->project_group); - priv->project_group = as_node_take_data (n); + as_app_set_project_group (app, as_node_get_data (n)); break; /* <compulsory_for_desktop> */ |