summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2016-01-21 20:11:00 +0000
committerRichard Hughes <richard@hughsie.com>2016-01-22 18:48:45 +0000
commitf3306629a1863dae3a03716f277952b8c65cfa9d (patch)
treebba2bb1395bc44a40cfb134a98c637e8dde27d9e
parentb7acc0361c6a2b14bdfe14cd2a84941f0f50d099 (diff)
downloadappstream-glib-f3306629a1863dae3a03716f277952b8c65cfa9d.tar.gz
Reject an invalid project group when parsing
-rw-r--r--libappstream-builder/plugins/asb-plugin-appdata.c12
-rw-r--r--libappstream-glib/as-app-private.h2
-rw-r--r--libappstream-glib/as-app-validate.c18
-rw-r--r--libappstream-glib/as-app.c11
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> */