diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-01 13:24:24 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-01 13:24:24 +0200 |
commit | 75d7a069206e8f3805d30f4df4655cb18d022fa4 (patch) | |
tree | 02ade7061c59f79a5cc2de7b93997f610cd71faa | |
parent | 36b3a011d38dc96a85ec4451ae6a3ed9cb1ac9e5 (diff) | |
download | vim-75d7a069206e8f3805d30f4df4655cb18d022fa4.zip |
updated for version 7.3.1086
Problem: Old regexp engine accepts illegal range, new one doesn't.
Solution: Also accept the illegal range with the new engine.
-rw-r--r-- | src/regexp_nfa.c | 18 | ||||
-rw-r--r-- | src/testdir/test64.in | 1 | ||||
-rw-r--r-- | src/testdir/test64.ok | 3 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 14 insertions, 10 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 753733d2b..2d1df6d63 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1089,8 +1089,9 @@ collection: * while loop. */ } } - /* Try a range like 'a-x' or '\t-z' */ - if (*regparse == '-') + /* Try a range like 'a-x' or '\t-z'. Also allows '-' as a + * start character. */ + if (*regparse == '-' && oldstartc != -1) { emit_range = TRUE; startc = oldstartc; @@ -1140,16 +1141,13 @@ collection: /* Normal printable char */ if (startc == -1) -#ifdef FEAT_MBYTE - startc = (*mb_ptr2char)(regparse); -#else - startc = *regparse; -#endif + startc = PTR2CHAR(regparse); /* Previous char was '-', so this char is end of range. */ if (emit_range) { - endc = startc; startc = oldstartc; + endc = startc; + startc = oldstartc; if (startc > endc) EMSG_RET_FAIL(_(e_invrange)); #ifdef FEAT_MBYTE @@ -1166,7 +1164,6 @@ collection: TRY_NEG(); EMIT_GLUE(); } - emit_range = FALSE; } else #endif @@ -1190,8 +1187,9 @@ collection: TRY_NEG(); EMIT_GLUE(); } - emit_range = FALSE; } + emit_range = FALSE; + startc = -1; } else { diff --git a/src/testdir/test64.in b/src/testdir/test64.in index f76f62f29..346e792fa 100644 --- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -270,6 +270,7 @@ STARTTEST :call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"]) :call add(tl, [2, '\_f', " \na ", "\n"]) :call add(tl, [2, '\_f\+', " \na ", "\na"]) +:call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"]) :" :"""" Test start/end of line, start/end of file :call add(tl, [2, '^a.', "a_\nb ", "a_"]) diff --git a/src/testdir/test64.ok b/src/testdir/test64.ok index 6423ecd4a..fdd55da38 100644 --- a/src/testdir/test64.ok +++ b/src/testdir/test64.ok @@ -605,6 +605,9 @@ OK 2 - \_f OK 0 - \_f\+ OK 1 - \_f\+ OK 2 - \_f\+ +OK 0 - [0-9A-Za-z-_.]\+ +OK 1 - [0-9A-Za-z-_.]\+ +OK 2 - [0-9A-Za-z-_.]\+ OK 0 - ^a. OK 1 - ^a. OK 2 - ^a. diff --git a/src/version.c b/src/version.c index 7d17122ec..ec0105e44 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1086, +/**/ 1085, /**/ 1084, |