[PackageKit-commit] packagekit: Branch 'master'

Richard Hughes hughsient at kemper.freedesktop.org
Sat Nov 15 02:15:22 PST 2008


 client/pk-console.c               |    9 +++++++-
 lib/packagekit-glib/pk-bitfield.c |   39 +++++++++++++++++++++++++++++---------
 2 files changed, 38 insertions(+), 10 deletions(-)

New commits:
commit baba96aaf2d564a01480c47dfe4d769e89c3b383
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Nov 15 10:14:32 2008 +0000

    bugfix: make pk_xxxx_bitfield_from_text functions return zero if any of the elements are unknown. This allows an error code in pkcon for an invalid filter

diff --git a/client/pk-console.c b/client/pk-console.c
index 8a0af52..6424cdf 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1509,8 +1509,15 @@ main (int argc, char *argv[])
 	g_signal_connect (client_signature, "finished",
 			  G_CALLBACK (pk_console_signature_finished_cb), NULL);
 
-	if (filter != NULL)
+	/* check filter */
+	if (filter != NULL) {
 		filters = pk_filter_bitfield_from_text (filter);
+		if (filters == 0) {
+			/* TRANSLATORS: The user specified an incorrect filter */
+			error = g_error_new (1, 0, "%s: '%s'", _("The filter specified was invalid"), filter);
+			goto out;
+		}
+	}
 	egg_debug ("filter=%s, filters=%" PK_BITFIELD_FORMAT, filter, filters);
 
 	mode = argv[1];
diff --git a/lib/packagekit-glib/pk-bitfield.c b/lib/packagekit-glib/pk-bitfield.c
index 35006f5..009f429 100644
--- a/lib/packagekit-glib/pk-bitfield.c
+++ b/lib/packagekit-glib/pk-bitfield.c
@@ -145,7 +145,7 @@ pk_role_bitfield_to_text (PkBitfield roles)
  *
  * Converts text representation to its enumerated type bitfield
  *
- * Return value: The enumerated type values
+ * Return value: The enumerated type values, or 0 for invalid
  **/
 PkBitfield
 pk_role_bitfield_from_text (const gchar *roles)
@@ -154,6 +154,7 @@ pk_role_bitfield_from_text (const gchar *roles)
 	gchar **split;
 	guint length;
 	guint i;
+	PkRoleEnum role;
 
 	split = g_strsplit (roles, ";", 0);
 	if (split == NULL) {
@@ -162,8 +163,14 @@ pk_role_bitfield_from_text (const gchar *roles)
 	}
 
 	length = g_strv_length (split);
-	for (i=0; i<length; i++)
-		roles_enum += pk_bitfield_value (pk_role_enum_from_text (split[i]));
+	for (i=0; i<length; i++) {
+		role = pk_role_enum_from_text (split[i]);
+		if (role == PK_ROLE_ENUM_UNKNOWN) {
+			roles_enum = 0;
+			break;
+		}
+		roles_enum += pk_bitfield_value (role);
+	}
 out:
 	g_strfreev (split);
 	return roles_enum;
@@ -206,7 +213,7 @@ pk_group_bitfield_to_text (PkBitfield groups)
  *
  * Converts text representation to its enumerated type bitfield
  *
- * Return value: The enumerated type values
+ * Return value: The enumerated type values, or 0 for invalid
  **/
 PkBitfield
 pk_group_bitfield_from_text (const gchar *groups)
@@ -215,6 +222,7 @@ pk_group_bitfield_from_text (const gchar *groups)
 	gchar **split;
 	guint length;
 	guint i;
+	PkGroupEnum group;
 
 	split = g_strsplit (groups, ";", 0);
 	if (split == NULL) {
@@ -223,8 +231,14 @@ pk_group_bitfield_from_text (const gchar *groups)
 	}
 
 	length = g_strv_length (split);
-	for (i=0; i<length; i++)
-		groups_enum += pk_bitfield_value (pk_group_enum_from_text (split[i]));
+	for (i=0; i<length; i++) {
+		group = pk_group_enum_from_text (split[i]);
+		if (group == PK_GROUP_ENUM_UNKNOWN) {
+			groups_enum = 0;
+			break;
+		}
+		groups_enum += pk_bitfield_value (group);
+	}
 out:
 	g_strfreev (split);
 	return groups_enum;
@@ -269,7 +283,7 @@ pk_filter_bitfield_to_text (PkBitfield filters)
  * pk_filter_bitfield_from_text:
  * @filters: the enumerated constant value, e.g. "available;~gui"
  *
- * Converts text representation to its enumerated type bitfield
+ * Converts text representation to its enumerated type bitfield, or 0 for invalid
  *
  * Return value: The enumerated type values
  **/
@@ -280,6 +294,7 @@ pk_filter_bitfield_from_text (const gchar *filters)
 	gchar **split;
 	guint length;
 	guint i;
+	PkFilterEnum filter;
 
 	split = g_strsplit (filters, ";", 0);
 	if (split == NULL) {
@@ -288,8 +303,14 @@ pk_filter_bitfield_from_text (const gchar *filters)
 	}
 
 	length = g_strv_length (split);
-	for (i=0; i<length; i++)
-		filters_enum += pk_bitfield_value (pk_filter_enum_from_text (split[i]));
+	for (i=0; i<length; i++) {
+		filter = pk_filter_enum_from_text (split[i]);
+		if (filter == PK_FILTER_ENUM_UNKNOWN) {
+			filters_enum = 0;
+			break;
+		}
+		filters_enum += pk_bitfield_value (filter);
+	}
 out:
 	g_strfreev (split);
 	return filters_enum;


More information about the PackageKit-commit mailing list