[gtk/lenient-compose-parsing] imcontext: Improve compose table parsing



commit 2f43b8dc49491c1dd73248326722eeb12029d95f
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Feb 15 01:41:09 2021 -0500

    imcontext: Improve compose table parsing
    
    Avoid leaking value in error cases, and actually
    emit a warning for a missing quote. Pointed out
    by Peter Bloomfield.

 gtk/gtkcomposetable.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c
index 3c60cc1886..09cf7b8e8f 100644
--- a/gtk/gtkcomposetable.c
+++ b/gtk/gtkcomposetable.c
@@ -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;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]