From 920e350d85360788acbe2568966f64210322cdda Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Thu, 26 May 2005 19:14:42 +0000 Subject: [PATCH] in input_tab(), make sure that we don't set *place to the middle of a multibyte character git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2556 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 3 +++ src/files.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2e4fe494..9954e96c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -55,6 +55,9 @@ CVS code - long instead of an unsigned int. (DLR) cwd_tab_completion(), browser_init() - Rename variable next to nextdir to avoid confusion. (DLR) + input_tab() + - Make sure that we don't set *place to the middle of a + multibyte character. (DLR) do_browser() - Don't treat NANO_CANCEL_KEY as NANO_EXIT_KEY anymore, for consistency. (DLR) diff --git a/src/files.c b/src/files.c index d704f6ab..08f90903 100644 --- a/src/files.c +++ b/src/files.c @@ -2225,7 +2225,10 @@ char *input_tab(char *buf, size_t *place, bool *lastwastab, bool *list) charmove(buf + common_len, buf + *place, buflen - *place + 1); charcpy(buf, mzero, common_len); - *place = common_len; + + /* Make sure that we don't advance the cursor to the middle + * of a multibyte character. */ + *place = mbstrnlen(buf, common_len); } else if (*lastwastab == FALSE || num_matches < 2) *lastwastab = TRUE; else {