| 4 |
Version 8.20 |
Version 8.20 |
| 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 in |
Perl has bugs and confusions, a closing square bracket is no longer allowed |
| 10 |
a POSIX name. |
in a POSIX name. |
| 11 |
|
|
| 12 |
|
2. If a pattern such as /(a)b|ac/ is matched against "ac", there is no captured |
| 13 |
|
substring, but while checking the failing first alternative, substring 1 is |
| 14 |
|
temporarily captured. If the output vector supplied to pcre_exec() was not |
| 15 |
|
big enough for this capture, the yield of the function was still zero |
| 16 |
|
("insufficient space for captured substrings"). This cannot be totally fixed |
| 17 |
|
without adding another stack variable, which seems a lot of expense for a |
| 18 |
|
edge case. However, I have improved the situation in cases such as |
| 19 |
|
/(a)(b)x|abc/ matched against "abc", where the return code indicates that |
| 20 |
|
fewer than the maximum number of slots in the ovector have been set. |
| 21 |
|
|
| 22 |
|
3. Related to (2) above: when there are more back references in a pattern than |
| 23 |
|
slots in the output vector, pcre_exec() uses temporary memory during |
| 24 |
|
matching, and copies in the captures as far as possible afterwards. It was |
| 25 |
|
using the entire output vector, but this conflicts with the specification |
| 26 |
|
that only 2/3 is used for passing back captured substrings. Now it uses only |
| 27 |
|
the first 2/3, for compatibility. This is, of course, another edge case. |
| 28 |
|
|
| 29 |
|
|
| 30 |
Version 8.13 16-Aug-2011 |
Version 8.13 16-Aug-2011 |