Skip to content

Commit bb7943b

Browse files
committed
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 #1703)
1 parent 763209c commit bb7943b

4 files changed

Lines changed: 23 additions & 7 deletions

File tree

src/regexp_nfa.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -628,37 +628,39 @@ nfa_recognize_char_class(char_u *start, char_u *end, int extra_newl)
628628
config |= CLASS_o9;
629629
break;
630630
}
631-
else
632631
if (*(p + 2) == '7')
633632
{
634633
config |= CLASS_o7;
635634
break;
636635
}
636+
return FAIL;
637+
637638
case 'a':
638639
if (*(p + 2) == 'z')
639640
{
640641
config |= CLASS_az;
641642
break;
642643
}
643-
else
644644
if (*(p + 2) == 'f')
645645
{
646646
config |= CLASS_af;
647647
break;
648648
}
649+
return FAIL;
650+
649651
case 'A':
650652
if (*(p + 2) == 'Z')
651653
{
652654
config |= CLASS_AZ;
653655
break;
654656
}
655-
else
656657
if (*(p + 2) == 'F')
657658
{
658659
config |= CLASS_AF;
659660
break;
660661
}
661-
/* FALLTHROUGH */
662+
return FAIL;
663+
662664
default:
663665
return FAIL;
664666
}

src/testdir/test36.in

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,15 @@ p:s/\%#=2\U//g
9898
p:s/\%#=0[^A-Z]//g
9999
p:s/\%#=1[^A-Z]//g
100100
p:s/\%#=2[^A-Z]//g
101-
p:s/\%#=0\%204l^\t...//g
102-
p:s/\%#=1\%205l^\t...//g
103-
p:s/\%#=2\%206l^\t...//g
101+
p:s/\%#=0\%210l^\t...//g
102+
p:s/\%#=1\%211l^\t...//g
103+
p:s/\%#=2\%212l^\t...//g
104+
p:s/\%#=0[0-z]//g
105+
p:s/\%#=1[0-z]//g
106+
p:s/\%#=2[0-z]//g
107+
p:s/\%#=0[^0-z]//g
108+
p:s/\%#=1[^0-z]//g
109+
p:s/\%#=2[^0-z]//g
104110
:/^start-here/+1,$wq! test.out
105111
ENDTEST
106112

src/testdir/test36.ok

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,9 @@ ABCDEFGHIXYZ
9797
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~����������
9898
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~����������
9999
!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~����������
100+
!"#$%&'()#+'-./{|}~����������
101+
!"#$%&'()#+'-./{|}~����������
102+
!"#$%&'()#+'-./{|}~����������
103+
0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz
104+
0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz
105+
0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,8 @@ static char *(features[]) =
764764

765765
static int included_patches[] =
766766
{ /* Add new patch number below this line */
767+
/**/
768+
618,
767769
/**/
768770
617,
769771
/**/

0 commit comments

Comments
 (0)