From a5978a15ec17c66c46415b89911e9633229cfed2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 19 Mar 2007 04:27:45 +0000 Subject: [PATCH] Ensure that the prefix is valid UTF-8. (#419568, Nickolay V. Shmyrev) 2007-03-18 Matthias Clasen * gtk/gtkentrycompletion.c (gtk_entry_completion_compute_prefix): Ensure that the prefix is valid UTF-8. (#419568, Nickolay V. Shmyrev) svn path=/trunk/; revision=17543 --- ChangeLog | 5 +++++ gtk/gtkentrycompletion.c | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2ec7c88b02..02e0bd76f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-03-18 Matthias Clasen + + * gtk/gtkentrycompletion.c (gtk_entry_completion_compute_prefix): + Ensure that the prefix is valid UTF-8. (#419568, Nickolay V. Shmyrev) + 2007-03-18 Matthias Clasen * modules/input/gtkimcontextmultipress.[hc]: diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index d4c51b4f49..d8bc08a06a 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -1500,7 +1500,7 @@ gtk_entry_completion_compute_prefix (GtkEntryCompletion *completion) else { gchar *p = prefix; - const gchar *q = text; + gchar *q = text; while (*p && *p == *q) { @@ -1509,6 +1509,19 @@ gtk_entry_completion_compute_prefix (GtkEntryCompletion *completion) } *p = '\0'; + + if (p > prefix) + { + /* strip a partial multibyte character */ + q = g_utf8_find_prev_char (prefix, p); + switch (g_utf8_get_char_validated (q, p - q)) + { + case (gunichar)-2: + case (gunichar)-1: + *q = 0; + default: ; + } + } } }