diff options
Diffstat (limited to '0001-imcontext-Fix-a-regression-in-Compose-file-parsing.patch')
-rw-r--r-- | 0001-imcontext-Fix-a-regression-in-Compose-file-parsing.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/0001-imcontext-Fix-a-regression-in-Compose-file-parsing.patch b/0001-imcontext-Fix-a-regression-in-Compose-file-parsing.patch new file mode 100644 index 0000000..04614a4 --- /dev/null +++ b/0001-imcontext-Fix-a-regression-in-Compose-file-parsing.patch @@ -0,0 +1,78 @@ +From 22960c5c20cf5a2d4666645f259d376784a11331 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen <mclasen@redhat.com> +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 + |