diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-02-14 11:54:05 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-02-14 11:56:24 -0500 |
commit | f15aa2f3e535336ba177510a87b3f28070c76fc2 (patch) | |
tree | 36eaf1d3c722e817264e20fe5ca725461d98e27d | |
parent | 5d6792137d2de0e93464a9fd6572b8693c708f1f (diff) | |
download | gtk+-f15aa2f3e535336ba177510a87b3f28070c76fc2.tar.gz |
imcontext: Fix a regression in Compose file parsing
We accidentally dropped the handing of # comments.
Bring it back. Test included.
Fixes: #3664
-rw-r--r-- | gtk/gtkcomposetable.c | 30 | ||||
-rw-r--r-- | testsuite/gtk/compose/comments | 4 | ||||
-rw-r--r-- | testsuite/gtk/compose/comments.expected | 5 |
3 files changed, 29 insertions, 10 deletions
diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c index c5261f8a63..20afc2dc44 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: diff --git a/testsuite/gtk/compose/comments b/testsuite/gtk/compose/comments new file mode 100644 index 0000000000..062c9aac08 --- /dev/null +++ b/testsuite/gtk/compose/comments @@ -0,0 +1,4 @@ +<Multi_key> <a> : "a" # just an a +<Multi_key> <b> : "#" # not an a +# this line is ignored +<Multi_key> <c> : "a" # wild and wilder: "@!$# diff --git a/testsuite/gtk/compose/comments.expected b/testsuite/gtk/compose/comments.expected new file mode 100644 index 0000000000..728817b5db --- /dev/null +++ b/testsuite/gtk/compose/comments.expected @@ -0,0 +1,5 @@ +# n_seqs: 3 +# max_seq_len: 2 +<Uff20> <U61> : "a" # U61 +<Uff20> <U62> : "#" # U23 +<Uff20> <U63> : "a" # U61 |