From 22960c5c20cf5a2d4666645f259d376784a11331 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 14 Feb 2021 11:54:05 -0500 Subject: [PATCH 1/3] imcontext: Fix a regression in Compose file parsing We accidentally dropped the handing of # comments. Bring it back. Fixes: #3664 --- gtk/gtkcomposetable.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c index 95cb16f9b8..f8657d2660 100644 --- a/gtk/gtkcomposetable.c +++ b/gtk/gtkcomposetable.c @@ -77,28 +77,40 @@ parse_compose_value (GtkComposeData *compose_data, const char *val, const char *line) { - char *word; const char *p; - gsize len; GString *value; gunichar ch; char *endp; - len = strlen (val); - if (val[0] != '"' || val[len - 1] != '"') + if (val[0] != '"') { g_warning ("Need to double-quote the value: %s: %s", val, line); goto fail; } - word = g_strndup (val + 1, len - 2); - value = g_string_new (""); - p = word; + p = val + 1; while (*p) { - if (*p == '\\') + if (*p == '\0') + { + g_warning ("Missing closing '\"': %s: %s", val, line); + goto fail; + } + else if (*p == '\"') + { + p++; + while (*p && g_ascii_isspace (*p)) + p++; + if (*p != '\0' && *p != '#') + { + g_warning ("Garbage after closing '\"': %s: %s", val, line); + goto fail; + } + break; + } + else if (*p == '\\') { if (p[1] == '"') { @@ -148,8 +160,6 @@ parse_compose_value (GtkComposeData *compose_data, compose_data->value = g_string_free (value, FALSE); - g_free (word); - return TRUE; fail: -- 2.29.2