summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-06-01 13:24:24 +0200
committerBram Moolenaar <Bram@vim.org>2013-06-01 13:24:24 +0200
commit75d7a069206e8f3805d30f4df4655cb18d022fa4 (patch)
tree02ade7061c59f79a5cc2de7b93997f610cd71faa
parent36b3a011d38dc96a85ec4451ae6a3ed9cb1ac9e5 (diff)
downloadvim-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.c18
-rw-r--r--src/testdir/test64.in1
-rw-r--r--src/testdir/test64.ok3
-rw-r--r--src/version.c2
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,