[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