8.13 bump
This commit is contained in:
parent
54a4973709
commit
1e7d91f17b
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
pcre-8.10.tar.bz2
|
pcre-8.10.tar.bz2
|
||||||
/pcre-8.11.tar.bz2
|
/pcre-8.11.tar.bz2
|
||||||
/pcre-8.12.tar.bz2
|
/pcre-8.12.tar.bz2
|
||||||
|
/pcre-8.13.tar.bz2
|
||||||
|
@ -1,552 +0,0 @@
|
|||||||
r595 | ph10 | 2011-05-02 12:33:29 +0200 (Po, 02 kvě 2011) | 3 lines
|
|
||||||
Fix problems with caseless reference matching in UTF-8 mode when the
|
|
||||||
upper/lower case characters have different lengths.
|
|
||||||
|
|
||||||
and
|
|
||||||
|
|
||||||
r597 | ph10 | 2011-05-02 19:08:52 +0200 (Po, 02 kvě 2011) | 2 lines
|
|
||||||
Complete incomplete fix for UTF-8 caseless references of different lengths.
|
|
||||||
|
|
||||||
http://bugs.exim.org/show_bug.cgi?id=1074
|
|
||||||
|
|
||||||
Petr Pisar: Changelog and comment changes removed.
|
|
||||||
|
|
||||||
Index: testdata/testoutput12
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testoutput12 (revision 594)
|
|
||||||
+++ testdata/testoutput12 (revision 595)
|
|
||||||
@@ -1176,4 +1176,64 @@
|
|
||||||
End
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
+/-- These behaved oddly in Perl, so they are kept in this test --/
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})?\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)?\1/8i
|
|
||||||
+ ȺȺȺⱥⱥ
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})?\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 1: \x{23a}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)?\1/8i
|
|
||||||
+ ȺȺȺⱥⱥⱥ
|
|
||||||
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 1: \x{23a}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)\1/8i
|
|
||||||
+ ȺȺȺⱥⱥ
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 1: \x{23a}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)\1/8i
|
|
||||||
+ ȺȺȺⱥⱥⱥ
|
|
||||||
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+ 1: \x{23a}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(\x{2c65}\x{2c65})\1/8i
|
|
||||||
+ \x{2c65}\x{2c65}\x{23a}\x{23a}
|
|
||||||
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}
|
|
||||||
+ 1: \x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(ⱥⱥ)\1/8i
|
|
||||||
+ ⱥⱥȺȺ
|
|
||||||
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}
|
|
||||||
+ 1: \x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1Y/8i
|
|
||||||
+ X\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}YZ
|
|
||||||
+ 0: \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}Y
|
|
||||||
+ 1: \x{23a}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(\x{2c65}\x{2c65})\1Y/8i
|
|
||||||
+ X\x{2c65}\x{2c65}\x{23a}\x{23a}YZ
|
|
||||||
+ 0: \x{2c65}\x{2c65}\x{23a}\x{23a}Y
|
|
||||||
+ 1: \x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/-- --/
|
|
||||||
+
|
|
||||||
/-- End of testinput12 --/
|
|
||||||
Index: testdata/testinput12
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testinput12 (revision 594)
|
|
||||||
+++ testdata/testinput12 (revision 595)
|
|
||||||
@@ -503,4 +503,44 @@
|
|
||||||
|
|
||||||
/A+\p{N}A+\dB+\p{N}*B+\d*/WBZ
|
|
||||||
|
|
||||||
+/-- These behaved oddly in Perl, so they are kept in this test --/
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})?\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)?\1/8i
|
|
||||||
+ ȺȺȺⱥⱥ
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})?\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)?\1/8i
|
|
||||||
+ ȺȺȺⱥⱥⱥ
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)\1/8i
|
|
||||||
+ ȺȺȺⱥⱥ
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1/8i
|
|
||||||
+ \x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}
|
|
||||||
+
|
|
||||||
+/(ȺȺȺ)\1/8i
|
|
||||||
+ ȺȺȺⱥⱥⱥ
|
|
||||||
+
|
|
||||||
+/(\x{2c65}\x{2c65})\1/8i
|
|
||||||
+ \x{2c65}\x{2c65}\x{23a}\x{23a}
|
|
||||||
+
|
|
||||||
+/(ⱥⱥ)\1/8i
|
|
||||||
+ ⱥⱥȺȺ
|
|
||||||
+
|
|
||||||
+/(\x{23a}\x{23a}\x{23a})\1Y/8i
|
|
||||||
+ X\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}\x{2c65}YZ
|
|
||||||
+
|
|
||||||
+/(\x{2c65}\x{2c65})\1Y/8i
|
|
||||||
+ X\x{2c65}\x{2c65}\x{23a}\x{23a}YZ
|
|
||||||
+
|
|
||||||
+/-- --/
|
|
||||||
+
|
|
||||||
/-- End of testinput12 --/
|
|
||||||
Index: pcre_exec.c
|
|
||||||
===================================================================
|
|
||||||
--- pcre_exec.c (revision 594)
|
|
||||||
+++ pcre_exec.c (revision 595)
|
|
||||||
@@ -132,24 +132,27 @@
|
|
||||||
* Match a back-reference *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
-/* If a back reference hasn't been set, the length that is passed is greater
|
|
||||||
-than the number of characters left in the string, so the match fails.
|
|
||||||
+/* Normally, if a back reference hasn't been set, the length that is passed is
|
|
||||||
+negative, so the match always fails. However, in JavaScript compatibility mode,
|
|
||||||
+the length passed is zero. Note that in caseless UTF-8 mode, the number of
|
|
||||||
+subject bytes matched may be different to the number of reference bytes.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
offset index into the offset vector
|
|
||||||
- eptr points into the subject
|
|
||||||
- length length to be matched
|
|
||||||
+ eptr pointer into the subject
|
|
||||||
+ length length of reference to be matched (number of bytes)
|
|
||||||
md points to match data block
|
|
||||||
ims the ims flags
|
|
||||||
|
|
||||||
-Returns: TRUE if matched
|
|
||||||
+Returns: < 0 if not matched, otherwise the number of subject bytes matched
|
|
||||||
*/
|
|
||||||
|
|
||||||
-static BOOL
|
|
||||||
+static int
|
|
||||||
match_ref(int offset, register USPTR eptr, int length, match_data *md,
|
|
||||||
unsigned long int ims)
|
|
||||||
{
|
|
||||||
-USPTR p = md->start_subject + md->offset_vector[offset];
|
|
||||||
+USPTR eptr_start = eptr;
|
|
||||||
+register USPTR p = md->start_subject + md->offset_vector[offset];
|
|
||||||
|
|
||||||
#ifdef PCRE_DEBUG
|
|
||||||
if (eptr >= md->end_subject)
|
|
||||||
@@ -164,9 +167,9 @@
|
|
||||||
printf("\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-/* Always fail if not enough characters left */
|
|
||||||
+/* Always fail if reference not set (and not JavaScript compatible). */
|
|
||||||
|
|
||||||
-if (length > md->end_subject - eptr) return FALSE;
|
|
||||||
+if (length < 0) return -1;
|
|
||||||
|
|
||||||
/* Separate the caseless case for speed. In UTF-8 mode we can only do this
|
|
||||||
properly if Unicode properties are supported. Otherwise, we can check only
|
|
||||||
@@ -178,13 +181,21 @@
|
|
||||||
#ifdef SUPPORT_UCP
|
|
||||||
if (md->utf8)
|
|
||||||
{
|
|
||||||
- USPTR endptr = eptr + length;
|
|
||||||
- while (eptr < endptr)
|
|
||||||
+ /* Match characters up to the end of the reference. NOTE: the number of
|
|
||||||
+ bytes matched may differ, because there are some characters whose upper and
|
|
||||||
+ lower case versions code as different numbers of bytes. For example, U+023A
|
|
||||||
+ (2 bytes in UTF-8) is the upper case version of U+2C65 (3 bytes in UTF-8);
|
|
||||||
+ a sequence of 3 of the former uses 6 bytes, as does a sequence of two of
|
|
||||||
+ the latter. It is important, therefore, to check the length along the
|
|
||||||
+ reference, not along the subject (earlier code did this wrong). */
|
|
||||||
+
|
|
||||||
+ USPTR endptr = p + length;
|
|
||||||
+ while (p < endptr)
|
|
||||||
{
|
|
||||||
int c, d;
|
|
||||||
GETCHARINC(c, eptr);
|
|
||||||
GETCHARINC(d, p);
|
|
||||||
- if (c != d && c != UCD_OTHERCASE(d)) return FALSE;
|
|
||||||
+ if (c != d && c != UCD_OTHERCASE(d)) return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
@@ -195,16 +206,16 @@
|
|
||||||
is no UCP support. */
|
|
||||||
|
|
||||||
while (length-- > 0)
|
|
||||||
- { if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; }
|
|
||||||
+ { if (md->lcc[*p++] != md->lcc[*eptr++]) return -1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In the caseful case, we can just compare the bytes, whether or not we
|
|
||||||
are in UTF-8 mode. */
|
|
||||||
|
|
||||||
else
|
|
||||||
- { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
|
|
||||||
+ { while (length-- > 0) if (*p++ != *eptr++) return -1; }
|
|
||||||
|
|
||||||
-return TRUE;
|
|
||||||
+return eptr - eptr_start;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2252,129 +2263,129 @@
|
|
||||||
loops). */
|
|
||||||
|
|
||||||
case OP_REF:
|
|
||||||
- {
|
|
||||||
- offset = GET2(ecode, 1) << 1; /* Doubled ref number */
|
|
||||||
- ecode += 3;
|
|
||||||
+ offset = GET2(ecode, 1) << 1; /* Doubled ref number */
|
|
||||||
+ ecode += 3;
|
|
||||||
|
|
||||||
- /* If the reference is unset, there are two possibilities:
|
|
||||||
+ /* If the reference is unset, there are two possibilities:
|
|
||||||
|
|
||||||
- (a) In the default, Perl-compatible state, set the length to be longer
|
|
||||||
- than the amount of subject left; this ensures that every attempt at a
|
|
||||||
- match fails. We can't just fail here, because of the possibility of
|
|
||||||
- quantifiers with zero minima.
|
|
||||||
+ (a) In the default, Perl-compatible state, set the length negative;
|
|
||||||
+ this ensures that every attempt at a match fails. We can't just fail
|
|
||||||
+ here, because of the possibility of quantifiers with zero minima.
|
|
||||||
|
|
||||||
- (b) If the JavaScript compatibility flag is set, set the length to zero
|
|
||||||
- so that the back reference matches an empty string.
|
|
||||||
+ (b) If the JavaScript compatibility flag is set, set the length to zero
|
|
||||||
+ so that the back reference matches an empty string.
|
|
||||||
|
|
||||||
- Otherwise, set the length to the length of what was matched by the
|
|
||||||
- referenced subpattern. */
|
|
||||||
+ Otherwise, set the length to the length of what was matched by the
|
|
||||||
+ referenced subpattern. */
|
|
||||||
|
|
||||||
- if (offset >= offset_top || md->offset_vector[offset] < 0)
|
|
||||||
- length = (md->jscript_compat)? 0 : (int)(md->end_subject - eptr + 1);
|
|
||||||
- else
|
|
||||||
- length = md->offset_vector[offset+1] - md->offset_vector[offset];
|
|
||||||
+ if (offset >= offset_top || md->offset_vector[offset] < 0)
|
|
||||||
+ length = (md->jscript_compat)? 0 : -1;
|
|
||||||
+ else
|
|
||||||
+ length = md->offset_vector[offset+1] - md->offset_vector[offset];
|
|
||||||
|
|
||||||
- /* Set up for repetition, or handle the non-repeated case */
|
|
||||||
+ /* Set up for repetition, or handle the non-repeated case */
|
|
||||||
|
|
||||||
- switch (*ecode)
|
|
||||||
- {
|
|
||||||
- case OP_CRSTAR:
|
|
||||||
- case OP_CRMINSTAR:
|
|
||||||
- case OP_CRPLUS:
|
|
||||||
- case OP_CRMINPLUS:
|
|
||||||
- case OP_CRQUERY:
|
|
||||||
- case OP_CRMINQUERY:
|
|
||||||
- c = *ecode++ - OP_CRSTAR;
|
|
||||||
- minimize = (c & 1) != 0;
|
|
||||||
- min = rep_min[c]; /* Pick up values from tables; */
|
|
||||||
- max = rep_max[c]; /* zero for max => infinity */
|
|
||||||
- if (max == 0) max = INT_MAX;
|
|
||||||
- break;
|
|
||||||
+ switch (*ecode)
|
|
||||||
+ {
|
|
||||||
+ case OP_CRSTAR:
|
|
||||||
+ case OP_CRMINSTAR:
|
|
||||||
+ case OP_CRPLUS:
|
|
||||||
+ case OP_CRMINPLUS:
|
|
||||||
+ case OP_CRQUERY:
|
|
||||||
+ case OP_CRMINQUERY:
|
|
||||||
+ c = *ecode++ - OP_CRSTAR;
|
|
||||||
+ minimize = (c & 1) != 0;
|
|
||||||
+ min = rep_min[c]; /* Pick up values from tables; */
|
|
||||||
+ max = rep_max[c]; /* zero for max => infinity */
|
|
||||||
+ if (max == 0) max = INT_MAX;
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
- case OP_CRRANGE:
|
|
||||||
- case OP_CRMINRANGE:
|
|
||||||
- minimize = (*ecode == OP_CRMINRANGE);
|
|
||||||
- min = GET2(ecode, 1);
|
|
||||||
- max = GET2(ecode, 3);
|
|
||||||
- if (max == 0) max = INT_MAX;
|
|
||||||
- ecode += 5;
|
|
||||||
- break;
|
|
||||||
+ case OP_CRRANGE:
|
|
||||||
+ case OP_CRMINRANGE:
|
|
||||||
+ minimize = (*ecode == OP_CRMINRANGE);
|
|
||||||
+ min = GET2(ecode, 1);
|
|
||||||
+ max = GET2(ecode, 3);
|
|
||||||
+ if (max == 0) max = INT_MAX;
|
|
||||||
+ ecode += 5;
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
- default: /* No repeat follows */
|
|
||||||
- if (!match_ref(offset, eptr, length, md, ims))
|
|
||||||
- {
|
|
||||||
- CHECK_PARTIAL();
|
|
||||||
- MRRETURN(MATCH_NOMATCH);
|
|
||||||
- }
|
|
||||||
- eptr += length;
|
|
||||||
- continue; /* With the main loop */
|
|
||||||
+ default: /* No repeat follows */
|
|
||||||
+ if ((length = match_ref(offset, eptr, length, md, ims)) < 0)
|
|
||||||
+ {
|
|
||||||
+ CHECK_PARTIAL();
|
|
||||||
+ MRRETURN(MATCH_NOMATCH);
|
|
||||||
}
|
|
||||||
+ eptr += length;
|
|
||||||
+ continue; /* With the main loop */
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- /* If the length of the reference is zero, just continue with the
|
|
||||||
- main loop. */
|
|
||||||
+ /* Handle repeated back references. If the length of the reference is
|
|
||||||
+ zero, just continue with the main loop. */
|
|
||||||
|
|
||||||
- if (length == 0) continue;
|
|
||||||
+ if (length == 0) continue;
|
|
||||||
|
|
||||||
- /* First, ensure the minimum number of matches are present. We get back
|
|
||||||
- the length of the reference string explicitly rather than passing the
|
|
||||||
- address of eptr, so that eptr can be a register variable. */
|
|
||||||
+ /* First, ensure the minimum number of matches are present. We get back
|
|
||||||
+ the length of the reference string explicitly rather than passing the
|
|
||||||
+ address of eptr, so that eptr can be a register variable. */
|
|
||||||
|
|
||||||
- for (i = 1; i <= min; i++)
|
|
||||||
+ for (i = 1; i <= min; i++)
|
|
||||||
+ {
|
|
||||||
+ int slength;
|
|
||||||
+ if ((slength = match_ref(offset, eptr, length, md, ims)) < 0)
|
|
||||||
{
|
|
||||||
- if (!match_ref(offset, eptr, length, md, ims))
|
|
||||||
- {
|
|
||||||
- CHECK_PARTIAL();
|
|
||||||
- MRRETURN(MATCH_NOMATCH);
|
|
||||||
- }
|
|
||||||
- eptr += length;
|
|
||||||
+ CHECK_PARTIAL();
|
|
||||||
+ MRRETURN(MATCH_NOMATCH);
|
|
||||||
}
|
|
||||||
+ eptr += slength;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- /* If min = max, continue at the same level without recursion.
|
|
||||||
- They are not both allowed to be zero. */
|
|
||||||
+ /* If min = max, continue at the same level without recursion.
|
|
||||||
+ They are not both allowed to be zero. */
|
|
||||||
|
|
||||||
- if (min == max) continue;
|
|
||||||
+ if (min == max) continue;
|
|
||||||
|
|
||||||
- /* If minimizing, keep trying and advancing the pointer */
|
|
||||||
+ /* If minimizing, keep trying and advancing the pointer */
|
|
||||||
|
|
||||||
- if (minimize)
|
|
||||||
+ if (minimize)
|
|
||||||
+ {
|
|
||||||
+ for (fi = min;; fi++)
|
|
||||||
{
|
|
||||||
- for (fi = min;; fi++)
|
|
||||||
+ int slength;
|
|
||||||
+ RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM14);
|
|
||||||
+ if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
|
||||||
+ if (fi >= max) MRRETURN(MATCH_NOMATCH);
|
|
||||||
+ if ((slength = match_ref(offset, eptr, length, md, ims)) < 0)
|
|
||||||
{
|
|
||||||
- RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM14);
|
|
||||||
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
|
||||||
- if (fi >= max) MRRETURN(MATCH_NOMATCH);
|
|
||||||
- if (!match_ref(offset, eptr, length, md, ims))
|
|
||||||
- {
|
|
||||||
- CHECK_PARTIAL();
|
|
||||||
- MRRETURN(MATCH_NOMATCH);
|
|
||||||
- }
|
|
||||||
- eptr += length;
|
|
||||||
+ CHECK_PARTIAL();
|
|
||||||
+ MRRETURN(MATCH_NOMATCH);
|
|
||||||
}
|
|
||||||
- /* Control never gets here */
|
|
||||||
+ eptr += slength;
|
|
||||||
}
|
|
||||||
+ /* Control never gets here */
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- /* If maximizing, find the longest string and work backwards */
|
|
||||||
+ /* If maximizing, find the longest string and work backwards */
|
|
||||||
|
|
||||||
- else
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ pp = eptr;
|
|
||||||
+ for (i = min; i < max; i++)
|
|
||||||
{
|
|
||||||
- pp = eptr;
|
|
||||||
- for (i = min; i < max; i++)
|
|
||||||
+ int slength;
|
|
||||||
+ if ((slength = match_ref(offset, eptr, length, md, ims)) < 0)
|
|
||||||
{
|
|
||||||
- if (!match_ref(offset, eptr, length, md, ims))
|
|
||||||
- {
|
|
||||||
- CHECK_PARTIAL();
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- eptr += length;
|
|
||||||
+ CHECK_PARTIAL();
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
- while (eptr >= pp)
|
|
||||||
- {
|
|
||||||
- RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM15);
|
|
||||||
- if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
|
||||||
- eptr -= length;
|
|
||||||
- }
|
|
||||||
- MRRETURN(MATCH_NOMATCH);
|
|
||||||
+ eptr += slength;
|
|
||||||
}
|
|
||||||
+ while (eptr >= pp)
|
|
||||||
+ {
|
|
||||||
+ RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM15);
|
|
||||||
+ if (rrc != MATCH_NOMATCH) RRETURN(rrc);
|
|
||||||
+ eptr -= length;
|
|
||||||
+ }
|
|
||||||
+ MRRETURN(MATCH_NOMATCH);
|
|
||||||
}
|
|
||||||
/* Control never gets here */
|
|
||||||
|
|
||||||
Index: testdata/testinput1
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testinput1 (revision 596)
|
|
||||||
+++ testdata/testinput1 (revision 597)
|
|
||||||
@@ -4079,4 +4079,10 @@
|
|
||||||
/^\c/
|
|
||||||
?
|
|
||||||
|
|
||||||
+/(abc)\1/i
|
|
||||||
+ abc
|
|
||||||
+
|
|
||||||
+/(abc)\1/
|
|
||||||
+ abc
|
|
||||||
+
|
|
||||||
/-- End of testinput1 --/
|
|
||||||
Index: testdata/testoutput1
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testoutput1 (revision 596)
|
|
||||||
+++ testdata/testoutput1 (revision 597)
|
|
||||||
@@ -6666,4 +6666,12 @@
|
|
||||||
?
|
|
||||||
0: ?
|
|
||||||
|
|
||||||
+/(abc)\1/i
|
|
||||||
+ abc
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(abc)\1/
|
|
||||||
+ abc
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
/-- End of testinput1 --/
|
|
||||||
Index: testdata/testinput4
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testinput4 (revision 596)
|
|
||||||
+++ testdata/testinput4 (revision 597)
|
|
||||||
@@ -644,4 +644,10 @@
|
|
||||||
/A*/g8
|
|
||||||
AAB\x{123}BAA
|
|
||||||
|
|
||||||
+/(abc)\1/8i
|
|
||||||
+ abc
|
|
||||||
+
|
|
||||||
+/(abc)\1/8
|
|
||||||
+ abc
|
|
||||||
+
|
|
||||||
/-- End of testinput4 --/
|
|
||||||
Index: testdata/testoutput4
|
|
||||||
===================================================================
|
|
||||||
--- testdata/testoutput4 (revision 596)
|
|
||||||
+++ testdata/testoutput4 (revision 597)
|
|
||||||
@@ -1128,4 +1128,12 @@
|
|
||||||
0: AA
|
|
||||||
0:
|
|
||||||
|
|
||||||
+/(abc)\1/8i
|
|
||||||
+ abc
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
+/(abc)\1/8
|
|
||||||
+ abc
|
|
||||||
+No match
|
|
||||||
+
|
|
||||||
/-- End of testinput4 --/
|
|
||||||
Index: pcre_exec.c
|
|
||||||
===================================================================
|
|
||||||
--- pcre_exec.c (revision 596)
|
|
||||||
+++ pcre_exec.c (revision 597)
|
|
||||||
@@ -193,6 +193,7 @@
|
|
||||||
while (p < endptr)
|
|
||||||
{
|
|
||||||
int c, d;
|
|
||||||
+ if (eptr >= md->end_subject) return -1;
|
|
||||||
GETCHARINC(c, eptr);
|
|
||||||
GETCHARINC(d, p);
|
|
||||||
if (c != d && c != UCD_OTHERCASE(d)) return -1;
|
|
||||||
@@ -204,16 +205,21 @@
|
|
||||||
|
|
||||||
/* The same code works when not in UTF-8 mode and in UTF-8 mode when there
|
|
||||||
is no UCP support. */
|
|
||||||
-
|
|
||||||
- while (length-- > 0)
|
|
||||||
- { if (md->lcc[*p++] != md->lcc[*eptr++]) return -1; }
|
|
||||||
+ {
|
|
||||||
+ if (eptr + length > md->end_subject) return -1;
|
|
||||||
+ while (length-- > 0)
|
|
||||||
+ { if (md->lcc[*p++] != md->lcc[*eptr++]) return -1; }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In the caseful case, we can just compare the bytes, whether or not we
|
|
||||||
are in UTF-8 mode. */
|
|
||||||
|
|
||||||
else
|
|
||||||
- { while (length-- > 0) if (*p++ != *eptr++) return -1; }
|
|
||||||
+ {
|
|
||||||
+ if (eptr + length > md->end_subject) return -1;
|
|
||||||
+ while (length-- > 0) if (*p++ != *eptr++) return -1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return eptr - eptr_start;
|
|
||||||
}
|
|
@ -1,104 +0,0 @@
|
|||||||
r599 | ph10 | 2011-05-07 18:09:06 +0200 (So, 07 kvě 2011) | 2 lines
|
|
||||||
|
|
||||||
Fix typos in pcregrep and pcretest man pages.
|
|
||||||
http://bugs.exim.org/show_bug.cgi?id=1081
|
|
||||||
|
|
||||||
Petr Pisar: Changelog lines removed
|
|
||||||
|
|
||||||
|
|
||||||
Index: doc/pcretest.1
|
|
||||||
===================================================================
|
|
||||||
--- doc/pcretest.1 (revision 598)
|
|
||||||
+++ doc/pcretest.1 (revision 599)
|
|
||||||
@@ -25,8 +25,8 @@
|
|
||||||
.rs
|
|
||||||
.TP 10
|
|
||||||
\fB-b\fP
|
|
||||||
-Behave as if each regex has the \fB/B\fP (show bytecode) modifier; the internal
|
|
||||||
-form is output after compilation.
|
|
||||||
+Behave as if each regex has the \fB/B\fP (show byte code) modifier; the
|
|
||||||
+internal form is output after compilation.
|
|
||||||
.TP 10
|
|
||||||
\fB-C\fP
|
|
||||||
Output the version number of the PCRE library, and all available information
|
|
||||||
@@ -76,7 +76,7 @@
|
|
||||||
Do not output the version number of \fBpcretest\fP at the start of execution.
|
|
||||||
.TP 10
|
|
||||||
\fB-S\fP \fIsize\fP
|
|
||||||
-On Unix-like systems, set the size of the runtime stack to \fIsize\fP
|
|
||||||
+On Unix-like systems, set the size of the run-time stack to \fIsize\fP
|
|
||||||
megabytes.
|
|
||||||
.TP 10
|
|
||||||
\fB-t\fP
|
|
||||||
@@ -154,7 +154,7 @@
|
|
||||||
A pattern may be followed by any number of modifiers, which are mostly single
|
|
||||||
characters. Following Perl usage, these are referred to below as, for example,
|
|
||||||
"the \fB/i\fP modifier", even though the delimiter of the pattern need not
|
|
||||||
-always be a slash, and no slash is used when writing modifiers. Whitespace may
|
|
||||||
+always be a slash, and no slash is used when writing modifiers. White space may
|
|
||||||
appear between the final pattern delimiter and the first modifier, and between
|
|
||||||
the modifiers themselves.
|
|
||||||
.P
|
|
||||||
@@ -327,8 +327,8 @@
|
|
||||||
.rs
|
|
||||||
.sp
|
|
||||||
Before each data line is passed to \fBpcre_exec()\fP, leading and trailing
|
|
||||||
-whitespace is removed, and it is then scanned for \e escapes. Some of these are
|
|
||||||
-pretty esoteric features, intended for checking out some of the more
|
|
||||||
+white space is removed, and it is then scanned for \e escapes. Some of these
|
|
||||||
+are pretty esoteric features, intended for checking out some of the more
|
|
||||||
complicated features of PCRE. If you are just testing "ordinary" regular
|
|
||||||
expressions, you probably don't need any of these. The following escapes are
|
|
||||||
recognized:
|
|
||||||
@@ -336,7 +336,7 @@
|
|
||||||
\ea alarm (BEL, \ex07)
|
|
||||||
\eb backspace (\ex08)
|
|
||||||
\ee escape (\ex27)
|
|
||||||
- \ef formfeed (\ex0c)
|
|
||||||
+ \ef form feed (\ex0c)
|
|
||||||
\en newline (\ex0a)
|
|
||||||
.\" JOIN
|
|
||||||
\eqdd set the PCRE_MATCH_LIMIT limit to dd
|
|
||||||
@@ -712,7 +712,7 @@
|
|
||||||
.rs
|
|
||||||
.sp
|
|
||||||
The facilities described in this section are not available when the POSIX
|
|
||||||
-inteface to PCRE is being used, that is, when the \fB/P\fP pattern modifier is
|
|
||||||
+interface to PCRE is being used, that is, when the \fB/P\fP pattern modifier is
|
|
||||||
specified.
|
|
||||||
.P
|
|
||||||
When the POSIX interface is not in use, you can cause \fBpcretest\fP to write a
|
|
||||||
@@ -736,7 +736,7 @@
|
|
||||||
follows immediately after the compiled pattern. After writing the file,
|
|
||||||
\fBpcretest\fP expects to read a new pattern.
|
|
||||||
.P
|
|
||||||
-A saved pattern can be reloaded into \fBpcretest\fP by specifing < and a file
|
|
||||||
+A saved pattern can be reloaded into \fBpcretest\fP by specifying < and a file
|
|
||||||
name instead of a pattern. The name of the file must not contain a < character,
|
|
||||||
as otherwise \fBpcretest\fP will interpret the line as a pattern delimited by <
|
|
||||||
characters.
|
|
||||||
Index: doc/pcregrep.1
|
|
||||||
===================================================================
|
|
||||||
--- doc/pcregrep.1 (revision 598)
|
|
||||||
+++ doc/pcregrep.1 (revision 599)
|
|
||||||
@@ -356,7 +356,7 @@
|
|
||||||
which recognizes any of the preceding three types, and an "any" convention, in
|
|
||||||
which any Unicode line ending sequence is assumed to end a line. The Unicode
|
|
||||||
sequences are the three just mentioned, plus VT (vertical tab, U+000B), FF
|
|
||||||
-(formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and
|
|
||||||
+(form feed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and
|
|
||||||
PS (paragraph separator, U+2029).
|
|
||||||
.sp
|
|
||||||
When the PCRE library is built, a default line-ending sequence is specified.
|
|
||||||
@@ -530,9 +530,9 @@
|
|
||||||
.rs
|
|
||||||
.sp
|
|
||||||
Exit status is 0 if any matches were found, 1 if no matches were found, and 2
|
|
||||||
-for syntax errors and non-existent or inacessible files (even if matches were
|
|
||||||
+for syntax errors and non-existent or inaccessible files (even if matches were
|
|
||||||
found in other files) or too many matching errors. Using the \fB-s\fP option to
|
|
||||||
-suppress error messages about inaccessble files does not affect the return
|
|
||||||
+suppress error messages about inaccessible files does not affect the return
|
|
||||||
code.
|
|
||||||
.
|
|
||||||
.
|
|
20
pcre.spec
20
pcre.spec
@ -1,18 +1,14 @@
|
|||||||
Name: pcre
|
Name: pcre
|
||||||
Version: 8.12
|
Version: 8.13
|
||||||
Release: 4%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Perl-compatible regular expression library
|
Summary: Perl-compatible regular expression library
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: http://www.pcre.org/
|
URL: http://www.pcre.org/
|
||||||
Source: ftp://ftp.csx.cam.ac.uk/pub/software/programming/%{name}/%{name}-%{version}.tar.bz2
|
Source: ftp://ftp.csx.cam.ac.uk/pub/software/programming/%{name}/%{name}-%{version}.tar.bz2
|
||||||
Patch0: pcre-8.10-multilib.patch
|
Patch0: pcre-8.10-multilib.patch
|
||||||
# In upstream, bugs #675476, #675477
|
|
||||||
Patch1: pcre-8.12-manual_typos.patch
|
|
||||||
# Refused by upstream, bug #675477
|
# Refused by upstream, bug #675477
|
||||||
Patch2: pcre-8.12-refused_spelling_terminated.patch
|
Patch1: pcre-8.12-refused_spelling_terminated.patch
|
||||||
# In upstream, bug #702623
|
|
||||||
Patch3: pcre-8.12-caseless_reference.patch
|
|
||||||
# New libtool to get rid of rpath
|
# New libtool to get rid of rpath
|
||||||
BuildRequires: autoconf, automake, libtool
|
BuildRequires: autoconf, automake, libtool
|
||||||
|
|
||||||
@ -44,9 +40,7 @@ Library for static linking for %{name}.
|
|||||||
# Get rid of rpath
|
# Get rid of rpath
|
||||||
%patch0 -p1 -b .multilib
|
%patch0 -p1 -b .multilib
|
||||||
libtoolize --copy --force && autoreconf
|
libtoolize --copy --force && autoreconf
|
||||||
%patch1 -p0 -b .manual_typos
|
%patch1 -p1 -b .terminated_typos
|
||||||
%patch2 -p1 -b .terminated_typos
|
|
||||||
%patch3 -p0 -b .caseless_reference
|
|
||||||
# One contributor's name is non-UTF-8
|
# One contributor's name is non-UTF-8
|
||||||
for F in ChangeLog; do
|
for F in ChangeLog; do
|
||||||
iconv -f latin1 -t utf8 "$F" >"${F}.utf8"
|
iconv -f latin1 -t utf8 "$F" >"${F}.utf8"
|
||||||
@ -106,6 +100,12 @@ make check
|
|||||||
%doc COPYING LICENCE
|
%doc COPYING LICENCE
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 18 2011 Petr Pisar <ppisar@redhat.com> - 8.13-1
|
||||||
|
- 8.13 bump: Bug-fix version, Unicode tables updated to 6.0.0, new pcregrep
|
||||||
|
option --buffer-size to adjust to long lines, new feature is passing of
|
||||||
|
*MARK information to callouts.
|
||||||
|
- Should fix crash back-tracking over unicode sequence (bug #691319)
|
||||||
|
|
||||||
* Mon May 09 2011 Petr Pisar <ppisar@redhat.com> - 8.12-4
|
* Mon May 09 2011 Petr Pisar <ppisar@redhat.com> - 8.12-4
|
||||||
- Fix caseless reference matching in UTF-8 mode when the upper/lower case
|
- Fix caseless reference matching in UTF-8 mode when the upper/lower case
|
||||||
characters have different lengths (bug #702623)
|
characters have different lengths (bug #702623)
|
||||||
|
Loading…
Reference in New Issue
Block a user