imcontext: Improve compose table parsing
authorMatthias Clasen <mclasen@redhat.com>
Mon, 15 Feb 2021 06:41:09 +0000 (01:41 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 15 Feb 2021 06:46:00 +0000 (01:46 -0500)
Avoid leaking value in error cases, and actually
emit a warning for a missing quote. Pointed out
by Peter Bloomfield.

gtk/gtkcomposetable.c

index 3c60cc1886445cc1f23886d1311fd7feb15e9bd9..09cf7b8e8fdbbc9bfa9c917480827a3582ed41df 100644 (file)
@@ -82,30 +82,34 @@ parse_compose_value (GtkComposeData *compose_data,
   gunichar ch;
   char *endp;
 
+  value = g_string_new ("");
+
   if (val[0] != '"')
     {
       g_warning ("Only strings supported after ':': %s: %s", val, line);
       goto fail;
     }
 
-  value = g_string_new ("");
-
   p = val + 1;
   while (*p)
     {
-      if (*p == '\0')
-        {
-          g_warning ("Missing closing '\"': %s: %s", val, line);
-          goto fail;
-        }
-      else if (*p == '\"')
+      if (*p == '\"')
         {
           p++;
           while (*p && g_ascii_isspace (*p))
             p++;
+
           if (*p != '\0' && *p != '#')
             g_warning ("Ignoring keysym after string: %s: %s", val, line);
-          break;
+
+          compose_data->value = g_string_free (value, FALSE);
+          return TRUE;
+        }
+
+      if (p[1] == '\0')
+        {
+          g_warning ("Missing closing '\"': %s: %s", val, line);
+          goto fail;
         }
       else if (*p == '\\')
         {
@@ -155,11 +159,9 @@ parse_compose_value (GtkComposeData *compose_data,
         }
     }
 
-  compose_data->value = g_string_free (value, FALSE);
-
-  return TRUE;
-
 fail:
+  g_string_free (value, TRUE);
+
   return FALSE;
 }