changeset 11469:0ade9dd85156 v8.0.0618

patch 8.0.0618: NFA regex engine handles [0-z] incorrectly commit https://github.com/vim/vim/commit/bb7943b7920ef2f88cb9b6f46c34c7946c370819 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jun 5 13:30:06 2017 +0200 patch 8.0.0618: NFA regex engine handles [0-z] incorrectly Problem: NFA regex engine handles [0-z] incorrectly. Solution: Return at the right point. (James McCoy, closes https://github.com/vim/vim/issues/1703)
author Christian Brabandt <cb@256bit.org>
date Mon, 05 Jun 2017 13:45:04 +0200
parents 4c3e993731a3
children 9b1fcec1b32b
files src/regexp_nfa.c src/testdir/test36.in src/testdir/test36.ok src/version.c
diffstat 4 files changed, 23 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -628,37 +628,39 @@ nfa_recognize_char_class(char_u *start, 
 			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;
 	    }
--- 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
 
--- 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
--- 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,