summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-19 11:20:12 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-19 11:20:12 +0000
commit5921aeb5741fc6e84c870d68c7c35b93ad0c9f87 (patch)
tree4021a330986b5974383318a43a0e440b6bfb7503
parente89bfd212b21c227f026e467f882c62cdd6e642d (diff)
downloadvim-git-5921aeb5741fc6e84c870d68c7c35b93ad0c9f87.tar.gz
patch 8.2.4418: crash when using special multi-byte characterv8.2.4418
Problem: Crash when using special multi-byte character. Solution: Don't use isalpha() for an arbitrary character.
-rw-r--r--src/charset.c6
-rw-r--r--src/filepath.c2
-rw-r--r--src/proto/charset.pro2
-rw-r--r--src/testdir/test_autochdir.vim8
-rw-r--r--src/version.c2
5 files changed, 18 insertions, 2 deletions
diff --git a/src/charset.c b/src/charset.c
index 2ecb96c89..ed09bd23f 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1645,6 +1645,12 @@ vim_isupper(int c)
}
int
+vim_isalpha(int c)
+{
+ return vim_islower(c) || vim_isupper(c);
+}
+
+ int
vim_toupper(int c)
{
if (c <= '@')
diff --git a/src/filepath.c b/src/filepath.c
index 929fa56a4..7a5dae441 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -3626,7 +3626,7 @@ unix_expandpath(
else if (path_end >= path + wildoff
&& (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
|| (!p_fic && (flags & EW_ICASE)
- && isalpha(PTR2CHAR(path_end)))))
+ && vim_isalpha(PTR2CHAR(path_end)))))
e = p;
if (has_mbyte)
{
diff --git a/src/proto/charset.pro b/src/proto/charset.pro
index ee5370bcc..df097109c 100644
--- a/src/proto/charset.pro
+++ b/src/proto/charset.pro
@@ -50,6 +50,7 @@ int vim_isxdigit(int c);
int vim_isbdigit(int c);
int vim_islower(int c);
int vim_isupper(int c);
+int vim_isalpha(int c);
int vim_toupper(int c);
int vim_tolower(int c);
char_u *skiptowhite(char_u *p);
@@ -63,5 +64,4 @@ int hexhex2nr(char_u *p);
int rem_backslash(char_u *str);
void backslash_halve(char_u *p);
char_u *backslash_halve_save(char_u *p);
-void ebcdic2ascii(char_u *buffer, int len);
/* vim: set ft=c : */
diff --git a/src/testdir/test_autochdir.vim b/src/testdir/test_autochdir.vim
index 5d367757f..95004d278 100644
--- a/src/testdir/test_autochdir.vim
+++ b/src/testdir/test_autochdir.vim
@@ -110,4 +110,12 @@ func Test_verbose_pwd()
call delete('Xautodir', 'rf')
endfunc
+func Test_multibyte()
+ " using an invalid character should not cause a crash
+ set wic
+ call assert_fails('tc *', 'E344:')
+ set nowic
+endfunc
+
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index f95b395b7..5cb721870 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4418,
+/**/
4417,
/**/
4416,