diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-19 11:20:12 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-19 11:20:12 +0000 |
commit | 5921aeb5741fc6e84c870d68c7c35b93ad0c9f87 (patch) | |
tree | 4021a330986b5974383318a43a0e440b6bfb7503 | |
parent | e89bfd212b21c227f026e467f882c62cdd6e642d (diff) | |
download | vim-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.c | 6 | ||||
-rw-r--r-- | src/filepath.c | 2 | ||||
-rw-r--r-- | src/proto/charset.pro | 2 | ||||
-rw-r--r-- | src/testdir/test_autochdir.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |