summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-06-05 13:30:06 +0200
committerBram Moolenaar <Bram@vim.org>2017-06-05 13:30:06 +0200
commitbb7943b7920ef2f88cb9b6f46c34c7946c370819 (patch)
tree6b646bc455347b774411c0fe6d6a39f0daaa640d
parent763209c57bf50ae777f9c2929eeea01eff7ae6ee (diff)
patch 8.0.0618: NFA regex engine handles [0-z] incorrectlyv8.0.0618
Problem: NFA regex engine handles [0-z] incorrectly. Solution: Return at the right point. (James McCoy, closes #1703)
-rw-r--r--src/regexp_nfa.c10
-rw-r--r--src/testdir/test36.in12
-rw-r--r--src/testdir/test36.ok6
-rw-r--r--src/version.c2
4 files changed, 23 insertions, 7 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 120861a46b..c490acb710 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -628,37 +628,39 @@ nfa_recognize_char_class(char_u *start, char_u *end, int extra_newl)
config |= CLASS_o9;
break;
}
- else
if (*(p + 2) == '7')
{
config |= CLASS_o7;
break;
}
+ return FAIL;
+
case 'a':
if (*(p + 2) == 'z')
{
config |= CLASS_az;
break;
}
- else
if (*(p + 2) == 'f')
{
config |= CLASS_af;
break;
}
+ return FAIL;
+
case 'A':
if (*(p + 2) == 'Z')
{
config |= CLASS_AZ;
break;
}
- else
if (*(p + 2) == 'F')
{
config |= CLASS_AF;
break;
}
- /* FALLTHROUGH */
+ return FAIL;
+
default:
return FAIL;
}
diff --git a/src/testdir/test36.in b/src/testdir/test36.in
index 5e8ce4484a..ea95ebbf24 100644
--- a/src/testdir/test36.in
+++ b/src/testdir/test36.in
@@ -98,9 +98,15 @@ p:s/\%#=2\U//g
p:s/\%#=0[^A-Z]//g
p:s/\%#=1[^A-Z]//g
p:s/\%#=2[^A-Z]//g
-p:s/\%#=0\%204l^\t...//g
-p:s/\%#=1\%205l^\t...//g
-p:s/\%#=2\%206l^\t...//g
+p:s/\%#=0\%210l^\t...//g
+p:s/\%#=1\%211l^\t...//g
+p:s/\%#=2\%212l^\t...//g
+p:s/\%#=0[0-z]//g
+p:s/\%#=1[0-z]//g
+p:s/\%#=2[0-z]//g
+p:s/\%#=0[^0-z]//g
+p:s/\%#=1[^0-z]//g
+p:s/\%#=2[^0-z]//g
:/^start-here/+1,$wq! test.out
ENDTEST
diff --git a/src/testdir/test36.ok b/src/testdir/test36.ok
index df21ed1c5b..867833bb96 100644
--- a/src/testdir/test36.ok
+++ b/src/testdir/test36.ok
@@ -97,3 +97,9 @@ ABCDEFGHIXYZ
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./{|}~€‚›¦±¼ÇÓé
+0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz
+0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz
+0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz
diff --git a/src/version.c b/src/version.c
index 4fddbb9244..fa8b538a8c 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 */
/**/
+ 618,
+/**/
617,
/**/
616,