diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-06-05 13:30:06 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-06-05 13:30:06 +0200 |
commit | bb7943b7920ef2f88cb9b6f46c34c7946c370819 (patch) | |
tree | 6b646bc455347b774411c0fe6d6a39f0daaa640d | |
parent | 763209c57bf50ae777f9c2929eeea01eff7ae6ee (diff) | |
download | vim-git-bb7943b7920ef2f88cb9b6f46c34c7946c370819.tar.gz |
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.c | 10 | ||||
-rw-r--r-- | src/testdir/test36.in | 12 | ||||
-rw-r--r-- | src/testdir/test36.ok | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 23 insertions, 7 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 120861a46..c490acb71 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 5e8ce4484..ea95ebbf2 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 df21ed1c5..867833bb9 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 4fddbb924..fa8b538a8 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, |