GVariant: Better handling of invalid UTF-8
authorRyan Lortie <desrt@desrt.ca>
Wed, 4 May 2011 16:12:31 +0000 (18:12 +0200)
committerRyan Lortie <desrt@desrt.ca>
Wed, 4 May 2011 16:20:23 +0000 (18:20 +0200)
g_variant_new_string() hits a g_return_if_fail() when given invalid
UTF-8.  That's certainly the right thing to do, but
g_variant_builder_add() uses this function internally and crashes when
it returns NULL due to the user passing a non-utf8 string.

We can protect the internal code by returning "[Invalid UTF-8]" in this
case while also making the problem easier to debug (and less fatal).

Closes #632631.

glib/gvariant.c

index 52a6349..813b3fb 100644 (file)
@@ -3687,7 +3687,16 @@ g_variant_valist_new_nnp (const gchar **str,
         }
 
     case 's':
-      return g_variant_new_string (ptr);
+      {
+        GVariant *value;
+
+        value = g_variant_new_string (ptr);
+
+        if (value == NULL)
+          value = g_variant_new_string ("[Invalid UTF-8]");
+
+        return value;
+      }
 
     case 'o':
       return g_variant_new_object_path (ptr);