[gtk/im-context-work] composetable: Parser fixes



commit dbbcb13721c5415d0097612d89c1c9cad0ad0497
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Feb 1 15:48:43 2021 -0500

    composetable: Parser fixes
    
    We were not handling octal escapes right.

 gtk/gtkcomposetable.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c
index afcedc42df..2b1d7bee7f 100644
--- a/gtk/gtkcomposetable.c
+++ b/gtk/gtkcomposetable.c
@@ -82,6 +82,7 @@ parse_compose_value (GtkComposeData *compose_data,
 {
   char **words = g_strsplit (val, "\"", 3);
   gunichar uch;
+  char *endp;
 
   if (g_strv_length (words) < 3)
     {
@@ -102,21 +103,32 @@ parse_compose_value (GtkComposeData *compose_data,
 
       /* The escaped string "\"" is separated with '\\' and '"'. */
       if (uch == '\0' && words[2][0] == '"')
-        uch = '"';
+        {
+          uch = '"';
+        }
       /* The escaped octal */
       else if (uch >= '0' && uch < '8')
-        uch = g_ascii_strtoll (words[1] + 1, NULL, 8);
+        {
+          uch = g_ascii_strtoll (words[1] + 1, &endp, 8);
+          if (*endp != '\0')
+            {
+              g_warning ("GTK supports to output one char only: %s: %s", val, line);
+              goto fail;
+            }
+        }
       /* If we need to handle other escape sequences. */
       else if (uch != '\\')
         {
           g_warning ("Invalid escape sequence: %s: %s", val, line);
         }
     }
-
-  if (g_utf8_get_char (g_utf8_next_char (words[1])) > 0)
+  else
     {
-      g_warning ("GTK supports to output one char only: %s: %s", val, line);
-      goto fail;
+      if (g_utf8_get_char (g_utf8_next_char (words[1])) > 0)
+        {
+          g_warning ("GTK supports to output one char only: %s: %s", val, line);
+          goto fail;
+        }
     }
 
   compose_data->value[1] = uch;


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