diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/regexp.c | 8 | ||||
-rw-r--r-- | src/regexp_nfa.c | 2 | ||||
-rw-r--r-- | src/testdir/test_regexp_utf8.vim | 17 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 25 insertions, 4 deletions
diff --git a/src/regexp.c b/src/regexp.c index e1f6484c0..de066a101 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -358,6 +358,8 @@ static char_u *regprop(char_u *); static int re_mult_next(char *what); static char_u e_missingbracket[] = N_("E769: Missing ] after %s["); +static char_u e_reverse_range[] = N_("E944: Reverse range in character class"); +static char_u e_large_class[] = N_("E945: Range too large in character class"); static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%("); static char_u e_unmatchedp[] = N_("E54: Unmatched %s("); static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)"); @@ -2426,14 +2428,14 @@ collection: endc = coll_get_char(); if (startc > endc) - EMSG_RET_NULL(_(e_invrange)); + EMSG_RET_NULL(_(e_reverse_range)); #ifdef FEAT_MBYTE if (has_mbyte && ((*mb_char2len)(startc) > 1 || (*mb_char2len)(endc) > 1)) { - /* Limit to a range of 256 chars */ + /* Limit to a range of 256 chars. */ if (endc > startc + 256) - EMSG_RET_NULL(_(e_invrange)); + EMSG_RET_NULL(_(e_large_class)); while (++startc <= endc) regmbc(startc); } diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index c490acb71..4e111f169 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1853,7 +1853,7 @@ collection: endc = startc; startc = oldstartc; if (startc > endc) - EMSG_RET_FAIL(_(e_invrange)); + EMSG_RET_FAIL(_(e_reverse_range)); if (endc > startc + 2) { diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim index c54b65081..bec5e0ed4 100644 --- a/src/testdir/test_regexp_utf8.vim +++ b/src/testdir/test_regexp_utf8.vim @@ -137,3 +137,20 @@ func Test_classes_re2() call s:classes_test() set re=0 endfunc + +func Test_reversed_range() + for re in range(0, 2) + exe 'set re=' . re + call assert_fails('call match("abc def", "[c-a]")', 'E944:') + endfor + set re=0 +endfunc + +func Test_large_class() + set re=1 + call assert_fails('call match("abc def", "[\u3000-\u4000]")', 'E945:') + set re=2 + call assert_equal(0, 'abc def' =~# '[\u3000-\u4000]') + call assert_equal(1, "\u3042" =~# '[\u3000-\u4000]') + set re=0 +endfunc diff --git a/src/version.c b/src/version.c index 0304389b3..e07d2a8dc 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 623, +/**/ 622, /**/ 621, |