File telepathy-gabble-cve-2013-1769.patch of Package telepathy-gabble.openSUSE_12.1_Update
diff --git a/lib/ext/wocky/wocky/wocky-caps-hash.c b/lib/ext/wocky/wocky/wocky-caps-hash.c
index bf31082..a15d48c 100644
--- a/lib/ext/wocky/wocky/wocky-caps-hash.c
+++ b/lib/ext/wocky/wocky/wocky-caps-hash.c
@@ -80,8 +80,17 @@ dataforms_cmp (gconstpointer a,
else if (left_type != NULL && right_type == NULL)
return 1;
else /* left_type != NULL && right_type != NULL */
- return strcmp (g_value_get_string (left_type->default_value),
- g_value_get_string (right_type->default_value));
+ {
+ const gchar *left_value = NULL, *right_value = NULL;
+
+ if (left_type->raw_value_contents != NULL)
+ left_value = left_type->raw_value_contents[0];
+
+ if (right_type->raw_value_contents != NULL)
+ right_value = right_type->raw_value_contents[0];
+
+ return g_strcmp0 (left_value, right_value);
+ }
}
static GPtrArray *
@@ -189,7 +198,14 @@ wocky_caps_hash_compute_from_lists (
goto cleanup;
}
- form_name = g_value_get_string (field->default_value);
+ if (field->raw_value_contents == NULL ||
+ g_strv_length (field->raw_value_contents) != 1)
+ {
+ DEBUG ("FORM_TYPE field does not have exactly one value; failing");
+ goto cleanup;
+ }
+
+ form_name = field->raw_value_contents[0];
if (g_hash_table_lookup (form_names, form_name) != NULL)
{
@@ -215,6 +231,14 @@ wocky_caps_hash_compute_from_lists (
field = l->data;
+ if (field->var == NULL)
+ {
+ DEBUG ("can't hash form '%s': it has an anonymous field",
+ form_name);
+ g_slist_free (fields);
+ goto cleanup;
+ }
+
if (!wocky_strdiff (field->var, "FORM_TYPE"))
continue;
diff --git a/lib/ext/wocky/wocky/wocky-data-form.c b/lib/ext/wocky/wocky/wocky-data-form.c
index 4eb3b66..3ba9c41 100644
--- a/lib/ext/wocky/wocky/wocky-data-form.c
+++ b/lib/ext/wocky/wocky/wocky-data-form.c
@@ -1014,7 +1014,7 @@ gint
wocky_data_form_field_cmp (const WockyDataFormField *left,
const WockyDataFormField *right)
{
- return strcmp (left->var, right->var);
+ return g_strcmp0 (left->var, right->var);
}
static void