4 |
Version 8.20 12-Sep-2011 |
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. This bug also affected patterns with classes that started |
in a POSIX name. This bug also affected patterns with classes that started |
11 |
with full stops. |
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 |
14 |
substring, but while checking the failing first alternative, substring 1 is |
captured substring, but while checking the failing first alternative, |
15 |
temporarily captured. If the output vector supplied to pcre_exec() was not |
substring 1 is temporarily captured. If the output vector supplied to |
16 |
big enough for this capture, the yield of the function was still zero |
pcre_exec() was not big enough for this capture, the yield of the function |
17 |
("insufficient space for captured substrings"). This cannot be totally fixed |
was still zero ("insufficient space for captured substrings"). This cannot |
18 |
without adding another stack variable, which seems a lot of expense for a |
be totally fixed without adding another stack variable, which seems a lot |
19 |
edge case. However, I have improved the situation in cases such as |
of expense for a edge case. However, I have improved the situation in cases |
20 |
/(a)(b)x|abc/ matched against "abc", where the return code indicates that |
such as /(a)(b)x|abc/ matched against "abc", where the return code |
21 |
fewer than the maximum number of slots in the ovector have been set. |
indicates that fewer than the maximum number of slots in the ovector have |
22 |
|
been set. |
23 |
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 |
3. Related to (2) above: when there are more back references in a pattern than |
25 |
matching, and copies in the captures as far as possible afterwards. It was |
slots in the output vector, pcre_exec() uses temporary memory during |
26 |
using the entire output vector, but this conflicts with the specification |
matching, and copies in the captures as far as possible afterwards. It was |
27 |
that only 2/3 is used for passing back captured substrings. Now it uses only |
using the entire output vector, but this conflicts with the specification |
28 |
the first 2/3, for compatibility. This is, of course, another edge case. |
that only 2/3 is used for passing back captured substrings. Now it uses |
29 |
|
only the first 2/3, for compatibility. This is, of course, another edge |
30 |
4. Zoltan Herczeg's just-in-time compiler support has been integrated into the |
case. |
31 |
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 |
4. Zoltan Herczeg's just-in-time compiler support has been integrated into the |
33 |
runtime --no-jit option is given. |
main code base, and can be used by building with --enable-jit. When this is |
34 |
|
done, pcregrep automatically uses it unless --disable-pcregrep-jit or the |
35 |
5. When the number of matches in a pcre_dfa_exec() run exactly filled the |
runtime --no-jit option is given. |
36 |
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 |
5. When the number of matches in a pcre_dfa_exec() run exactly filled the |
38 |
returned. |
ovector, the return from the function was zero, implying that there were |
39 |
|
other matches that did not fit. The correct "exactly full" value is now |
40 |
6. If a subpattern that was called recursively or as a subroutine contained |
returned. |
41 |
(*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 |
6. If a subpattern that was called recursively or as a subroutine contained |
43 |
position)" or even infinite loops could occur. |
(*PRUNE) or any other control that caused it to give a non-standard return, |
44 |
|
invalid errors such as "Error -26 (nested recursion at the same subject |
45 |
7. If a pattern such as /a(*SKIP)c|b(*ACCEPT)|/ was studied, it stopped |
position)" or even infinite loops could occur. |
46 |
computing the minimum length on reaching *ACCEPT, and so ended up with the |
|
47 |
wrong value of 1 rather than 0. Further investigation indicates that |
7. If a pattern such as /a(*SKIP)c|b(*ACCEPT)|/ was studied, it stopped |
48 |
computing a minimum subject length in the presence of *ACCEPT is difficult |
computing the minimum length on reaching *ACCEPT, and so ended up with the |
49 |
(think back references, subroutine calls), and so I have changed the code so |
wrong value of 1 rather than 0. Further investigation indicates that |
50 |
that no minimum is registered for a pattern that contains *ACCEPT. |
computing a minimum subject length in the presence of *ACCEPT is difficult |
51 |
|
(think back references, subroutine calls), and so I have changed the code |
52 |
8. If (*THEN) was present in the first (true) branch of a conditional group, |
so that no minimum is registered for a pattern that contains *ACCEPT. |
53 |
it was not handled as intended. |
|
54 |
|
8. If (*THEN) was present in the first (true) branch of a conditional group, |
55 |
|
it was not handled as intended. |
56 |
|
|
57 |
|
9. Replaced RunTest.bat with the much improved version provided by Sheri |
58 |
|
Pierce. |
59 |
|
|
60 |
9. Replaced RunTest.bat with the much improved version provided by Sheri |
10. A pathological pattern such as /(*ACCEPT)a/ was miscompiled, thinking that |
61 |
Pierce. |
the first byte in a match must be "a". |
62 |
|
|
63 |
|
|
64 |
Version 8.13 16-Aug-2011 |
Version 8.13 16-Aug-2011 |