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
openSUSE Build Service is sponsored by