| 1 |
ChangeLog for PCRE |
ChangeLog for PCRE |
| 2 |
------------------ |
------------------ |
| 3 |
|
|
| 4 |
Version 8.20 |
Version 8.20 12-Sep-2011 |
| 5 |
------------ |
------------------------ |
| 6 |
|
|
| 7 |
1. Change 37 of 8.13 broke patterns like [:a]...[b:] because it thought it had |
1. Change 37 of 8.13 broke patterns like [:a]...[b:] because it thought it had |
| 8 |
a POSIX class. After further experiments with Perl, which convinced me that |
a POSIX class. After further experiments with Perl, which convinced me that |
| 9 |
Perl has bugs and confusions, a closing square bracket is no longer allowed |
Perl has bugs and confusions, a closing square bracket is no longer allowed |
| 10 |
in a POSIX name. |
in a POSIX name. This bug also affected patterns with classes that started |
| 11 |
|
with full stops. |
| 12 |
|
|
| 13 |
2. If a pattern such as /(a)b|ac/ is matched against "ac", there is no captured |
2. If a pattern such as /(a)b|ac/ is matched against "ac", there is no captured |
| 14 |
substring, but while checking the failing first alternative, substring 1 is |
substring, but while checking the failing first alternative, substring 1 is |
| 15 |
temporarily captured. If the output vector supplied to pcre_exec() was not |
temporarily captured. If the output vector supplied to pcre_exec() was not |
| 16 |
big enough for this capture, the yield of the function was still zero |
big enough for this capture, the yield of the function was still zero |
| 17 |
("insufficient space for captured substrings"). This cannot be totally fixed |
("insufficient space for captured substrings"). This cannot be totally fixed |
| 18 |
without adding another stack variable, which seems a lot of expense for a |
without adding another stack variable, which seems a lot of expense for a |
| 19 |
edge case. However, I have improved the situation in cases such as |
edge case. However, I have improved the situation in cases such as |
| 20 |
/(a)(b)x|abc/ matched against "abc", where the return code indicates that |
/(a)(b)x|abc/ matched against "abc", where the return code indicates that |
| 21 |
fewer than the maximum number of slots in the ovector have been set. |
fewer than the maximum number of slots in the ovector have been set. |
| 22 |
|
|
| 23 |
3. Related to (2) above: when there are more back references in a pattern than |
3. Related to (2) above: when there are more back references in a pattern than |
| 24 |
slots in the output vector, pcre_exec() uses temporary memory during |
slots in the output vector, pcre_exec() uses temporary memory during |
| 25 |
matching, and copies in the captures as far as possible afterwards. It was |
matching, and copies in the captures as far as possible afterwards. It was |
| 26 |
using the entire output vector, but this conflicts with the specification |
using the entire output vector, but this conflicts with the specification |
| 27 |
that only 2/3 is used for passing back captured substrings. Now it uses only |
that only 2/3 is used for passing back captured substrings. Now it uses only |
| 28 |
the first 2/3, for compatibility. This is, of course, another edge case. |
the first 2/3, for compatibility. This is, of course, another edge case. |
| 29 |
|
|
| 30 |
4. Zoltan Herczeg's just-in-time compiler support has been integrated into the |
4. Zoltan Herczeg's just-in-time compiler support has been integrated into the |
| 31 |
main code base, and can be used by building with --enable-jit. When this is |
main code base, and can be used by building with --enable-jit. When this is |
| 32 |
done, pcregrep automatically uses it unless --disable-pcregrep-jit or the |
done, pcregrep automatically uses it unless --disable-pcregrep-jit or the |
| 33 |
runtime --no-jit option is given. |
runtime --no-jit option is given. |
| 34 |
|
|
| 35 |
5. When the number of matches in a pcre_dfa_exec() run exactly filled the |
5. When the number of matches in a pcre_dfa_exec() run exactly filled the |
| 36 |
ovector, the return from the function was zero, implying that there were |
ovector, the return from the function was zero, implying that there were |
| 37 |
other matches that did not fit. The correct "exactly full" value is now |
other matches that did not fit. The correct "exactly full" value is now |
| 38 |
returned. |
returned. |
| 39 |
|
|
| 40 |
6. If a subpattern that was called recursively or as a subroutine contained |
6. If a subpattern that was called recursively or as a subroutine contained |
| 41 |
(*PRUNE) or any other control that caused it to give a non-standard return, |
(*PRUNE) or any other control that caused it to give a non-standard return, |
| 42 |
invalid errors such as "Error -26 (nested recursion at the same subject |
invalid errors such as "Error -26 (nested recursion at the same subject |
| 43 |
position)" or even infinite loops could occur. |
position)" or even infinite loops could occur. |
| 44 |
|
|
| 45 |
|
|
| 46 |
Version 8.13 16-Aug-2011 |
Version 8.13 16-Aug-2011 |