Fix extended *verb name ignored terminating whitespace bug.
This commit is contained in:
parent
12fc152074
commit
7b1d9549c6
|
@ -353,6 +353,11 @@ was set when the pmatch argument was NULL. It now returns REG_INVARG.
|
||||||
pcre2_compile() to misbehave when auto callouts were enabled. This bug
|
pcre2_compile() to misbehave when auto callouts were enabled. This bug
|
||||||
was found by the LLVM fuzzer.
|
was found by the LLVM fuzzer.
|
||||||
|
|
||||||
|
106. If both PCRE2_ALT_VERBNAMES and PCRE2_EXTENDED were set, and a (*MARK) or
|
||||||
|
other verb "name" ended with whitespace immediately before the closing
|
||||||
|
parenthesis, pcre2_compile() misbehaved. Example: /(*:abc )/, but only when
|
||||||
|
both those options were set.
|
||||||
|
|
||||||
|
|
||||||
Version 10.20 30-June-2015
|
Version 10.20 30-June-2015
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
|
@ -3013,15 +3013,14 @@ for (; ptr < cb->end_pattern; ptr++)
|
||||||
{
|
{
|
||||||
if (x == CHAR_RIGHT_PARENTHESIS) break;
|
if (x == CHAR_RIGHT_PARENTHESIS) break;
|
||||||
|
|
||||||
/* Skip over comments and whitespace in extended mode. Need a loop to
|
/* Skip over comments and whitespace in extended mode. */
|
||||||
handle whitespace after a comment. */
|
|
||||||
|
|
||||||
if ((options & PCRE2_EXTENDED) != 0)
|
if ((options & PCRE2_EXTENDED) != 0)
|
||||||
{
|
{
|
||||||
for (;;)
|
PCRE2_SPTR wscptr = ptr;
|
||||||
|
while (MAX_255(x) && (cb->ctypes[x] & ctype_space) != 0) x = *(++ptr);
|
||||||
|
if (x == CHAR_NUMBER_SIGN)
|
||||||
{
|
{
|
||||||
while (MAX_255(x) && (cb->ctypes[x] & ctype_space) != 0) x = *(++ptr);
|
|
||||||
if (x != CHAR_NUMBER_SIGN) break;
|
|
||||||
ptr++;
|
ptr++;
|
||||||
while (*ptr != CHAR_NULL)
|
while (*ptr != CHAR_NULL)
|
||||||
{
|
{
|
||||||
|
@ -3035,9 +3034,15 @@ for (; ptr < cb->end_pattern; ptr++)
|
||||||
if (utf) FORWARDCHAR(ptr);
|
if (utf) FORWARDCHAR(ptr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
x = *ptr; /* Either NULL or the char after a newline */
|
|
||||||
}
|
}
|
||||||
if (ptr >= cb->end_pattern) break;
|
|
||||||
|
/* If we have skipped any characters, restart the loop. */
|
||||||
|
|
||||||
|
if (ptr > wscptr)
|
||||||
|
{
|
||||||
|
ptr--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process escapes */
|
/* Process escapes */
|
||||||
|
|
|
@ -4702,4 +4702,6 @@ a)"xI
|
||||||
/()\Q\E*]/B,auto_callout
|
/()\Q\E*]/B,auto_callout
|
||||||
a[bc]d
|
a[bc]d
|
||||||
|
|
||||||
|
/\x8a+f|;T?(*:;.'?`(\xeap ){![^()!y*''C*(?';]{1;(\x08)/B,alt_verbnames,dupnames,extended
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
|
@ -14979,4 +14979,23 @@ Subject length lower bound = 0
|
||||||
0: ]
|
0: ]
|
||||||
1:
|
1:
|
||||||
|
|
||||||
|
/\x8a+f|;T?(*:;.'?`(\xeap ){![^()!y*''C*(?';]{1;(\x08)/B,alt_verbnames,dupnames,extended
|
||||||
|
------------------------------------------------------------------
|
||||||
|
Bra
|
||||||
|
\x{8a}++
|
||||||
|
f
|
||||||
|
Alt
|
||||||
|
;
|
||||||
|
T?
|
||||||
|
*MARK ;.'?`(\x{ea}p
|
||||||
|
{!
|
||||||
|
[\x00- "-&+-:<->@-BD-xz-\xff] (neg)
|
||||||
|
{1;
|
||||||
|
CBra 1
|
||||||
|
\x08
|
||||||
|
Ket
|
||||||
|
Ket
|
||||||
|
End
|
||||||
|
------------------------------------------------------------------
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
Loading…
Reference in New Issue