Fix bad compile of patterns like /[A-`]/i,utf where the range contains
characters with multiple other cases and the ranges adjoin.
This commit is contained in:
parent
24a102885d
commit
54396a364d
|
@ -115,6 +115,11 @@ of various issues, and new ones are still appear unfortunately. To fix
|
||||||
existing and future issues, size computation is eliminated from the code,
|
existing and future issues, size computation is eliminated from the code,
|
||||||
and replaced by on-demand memory allocation.
|
and replaced by on-demand memory allocation.
|
||||||
|
|
||||||
|
25. A pattern such as /(?i)[A-`]/, where characters in the other case are
|
||||||
|
adjacent to the end of the range, and the range contained characters with more
|
||||||
|
than one other case, caused incorrect behaviour when compiled in UTF mode. In
|
||||||
|
that example, the range a-j was left out of the class.
|
||||||
|
|
||||||
|
|
||||||
Version 10.00 05-January-2015
|
Version 10.00 05-January-2015
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
|
@ -2864,7 +2864,11 @@ if ((options & PCRE2_CASELESS) != 0)
|
||||||
range. Otherwise, use a recursive call to add the additional range. */
|
range. Otherwise, use a recursive call to add the additional range. */
|
||||||
|
|
||||||
else if (oc < start && od >= start - 1) start = oc; /* Extend downwards */
|
else if (oc < start && od >= start - 1) start = oc; /* Extend downwards */
|
||||||
else if (od > end && oc <= end + 1) end = od; /* Extend upwards */
|
else if (od > end && oc <= end + 1)
|
||||||
|
{
|
||||||
|
end = od; /* Extend upwards */
|
||||||
|
if (end > classbits_end) classbits_end = (end <= 0xff ? end : 0xff);
|
||||||
|
}
|
||||||
else n8 += add_to_class(classbits, uchardptr, options, cb, oc, od);
|
else n8 += add_to_class(classbits, uchardptr, options, cb, oc, od);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2216,4 +2216,7 @@
|
||||||
\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
||||||
\x{23a}\x{23a}\x{2c65}\x{23a}
|
\x{23a}\x{23a}\x{2c65}\x{23a}
|
||||||
|
|
||||||
|
/[A-`]/i,utf
|
||||||
|
abcdefghijklmno
|
||||||
|
|
||||||
# End of testinput4
|
# End of testinput4
|
||||||
|
|
|
@ -1638,4 +1638,7 @@
|
||||||
|
|
||||||
/[^\xff]((?1))/utf,debug
|
/[^\xff]((?1))/utf,debug
|
||||||
|
|
||||||
|
/[A-`]/iB,utf
|
||||||
|
abcdefghijklmno
|
||||||
|
|
||||||
# End of testinput5
|
# End of testinput5
|
||||||
|
|
|
@ -3735,4 +3735,8 @@ No match
|
||||||
\x{23a}\x{23a}\x{2c65}\x{23a}
|
\x{23a}\x{23a}\x{2c65}\x{23a}
|
||||||
No match
|
No match
|
||||||
|
|
||||||
|
/[A-`]/i,utf
|
||||||
|
abcdefghijklmno
|
||||||
|
0: a
|
||||||
|
|
||||||
# End of testinput4
|
# End of testinput4
|
||||||
|
|
|
@ -4009,4 +4009,14 @@ Subject length lower bound = 1
|
||||||
/[^\xff]((?1))/utf,debug
|
/[^\xff]((?1))/utf,debug
|
||||||
Failed: error 140 at offset 11: recursion could loop indefinitely
|
Failed: error 140 at offset 11: recursion could loop indefinitely
|
||||||
|
|
||||||
|
/[A-`]/iB,utf
|
||||||
|
------------------------------------------------------------------
|
||||||
|
Bra
|
||||||
|
[A-z\x{212a}\x{17f}]
|
||||||
|
Ket
|
||||||
|
End
|
||||||
|
------------------------------------------------------------------
|
||||||
|
abcdefghijklmno
|
||||||
|
0: a
|
||||||
|
|
||||||
# End of testinput5
|
# End of testinput5
|
||||||
|
|
Loading…
Reference in New Issue