summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/regexp.c8
-rw-r--r--src/regexp_nfa.c2
-rw-r--r--src/testdir/test_regexp_utf8.vim17
-rw-r--r--src/version.c2
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,