| 1429 |
/* Match a single character type; inline for speed */ |
/* Match a single character type; inline for speed */ |
| 1430 |
|
|
| 1431 |
case OP_ANY: |
case OP_ANY: |
| 1432 |
if ((ims & PCRE_DOTALL) == 0) |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
| 1433 |
{ |
/* Fall through */ |
| 1434 |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
|
| 1435 |
} |
case OP_ALLANY: |
| 1436 |
if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); |
if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH); |
| 1437 |
if (utf8) |
if (utf8) while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
| 1438 |
ecode++; |
ecode++; |
| 1439 |
break; |
break; |
| 1440 |
|
|
| 1730 |
case OP_REF: |
case OP_REF: |
| 1731 |
{ |
{ |
| 1732 |
offset = GET2(ecode, 1) << 1; /* Doubled ref number */ |
offset = GET2(ecode, 1) << 1; /* Doubled ref number */ |
| 1733 |
ecode += 3; /* Advance past item */ |
ecode += 3; |
| 1734 |
|
|
| 1735 |
|
/* If the reference is unset, there are two possibilities: |
| 1736 |
|
|
| 1737 |
|
(a) In the default, Perl-compatible state, set the length to be longer |
| 1738 |
|
than the amount of subject left; this ensures that every attempt at a |
| 1739 |
|
match fails. We can't just fail here, because of the possibility of |
| 1740 |
|
quantifiers with zero minima. |
| 1741 |
|
|
| 1742 |
/* If the reference is unset, set the length to be longer than the amount |
(b) If the JavaScript compatibility flag is set, set the length to zero |
| 1743 |
of subject left; this ensures that every attempt at a match fails. We |
so that the back reference matches an empty string. |
| 1744 |
can't just fail here, because of the possibility of quantifiers with zero |
|
| 1745 |
minima. */ |
Otherwise, set the length to the length of what was matched by the |
| 1746 |
|
referenced subpattern. */ |
| 1747 |
length = (offset >= offset_top || md->offset_vector[offset] < 0)? |
|
| 1748 |
md->end_subject - eptr + 1 : |
if (offset >= offset_top || md->offset_vector[offset] < 0) |
| 1749 |
md->offset_vector[offset+1] - md->offset_vector[offset]; |
length = (md->jscript_compat)? 0 : md->end_subject - eptr + 1; |
| 1750 |
|
else |
| 1751 |
|
length = md->offset_vector[offset+1] - md->offset_vector[offset]; |
| 1752 |
|
|
| 1753 |
/* Set up for repetition, or handle the non-repeated case */ |
/* Set up for repetition, or handle the non-repeated case */ |
| 1754 |
|
|
| 2951 |
case OP_ANY: |
case OP_ANY: |
| 2952 |
for (i = 1; i <= min; i++) |
for (i = 1; i <= min; i++) |
| 2953 |
{ |
{ |
| 2954 |
if (eptr >= md->end_subject || |
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) |
|
((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr))) |
|
| 2955 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
| 2956 |
eptr++; |
eptr++; |
| 2957 |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
| 2958 |
} |
} |
| 2959 |
break; |
break; |
| 2960 |
|
|
| 2961 |
|
case OP_ALLANY: |
| 2962 |
|
for (i = 1; i <= min; i++) |
| 2963 |
|
{ |
| 2964 |
|
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH); |
| 2965 |
|
eptr++; |
| 2966 |
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
| 2967 |
|
} |
| 2968 |
|
break; |
| 2969 |
|
|
| 2970 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
| 2971 |
eptr += min; |
eptr += min; |
| 2972 |
break; |
break; |
| 3175 |
switch(ctype) |
switch(ctype) |
| 3176 |
{ |
{ |
| 3177 |
case OP_ANY: |
case OP_ANY: |
| 3178 |
if ((ims & PCRE_DOTALL) == 0) |
for (i = 1; i <= min; i++) |
| 3179 |
{ |
{ |
| 3180 |
for (i = 1; i <= min; i++) |
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
| 3181 |
{ |
eptr++; |
|
if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH); |
|
|
eptr++; |
|
|
} |
|
| 3182 |
} |
} |
| 3183 |
else eptr += min; |
break; |
| 3184 |
|
|
| 3185 |
|
case OP_ALLANY: |
| 3186 |
|
eptr += min; |
| 3187 |
break; |
break; |
| 3188 |
|
|
| 3189 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
| 3440 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42); |
| 3441 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 3442 |
if (fi >= max || eptr >= md->end_subject || |
if (fi >= max || eptr >= md->end_subject || |
| 3443 |
(ctype == OP_ANY && (ims & PCRE_DOTALL) == 0 && |
(ctype == OP_ANY && IS_NEWLINE(eptr))) |
|
IS_NEWLINE(eptr))) |
|
| 3444 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
| 3445 |
|
|
| 3446 |
GETCHARINC(c, eptr); |
GETCHARINC(c, eptr); |
| 3447 |
switch(ctype) |
switch(ctype) |
| 3448 |
{ |
{ |
| 3449 |
case OP_ANY: /* This is the DOTALL case */ |
case OP_ANY: /* This is the non-NL case */ |
| 3450 |
break; |
case OP_ALLANY: |
|
|
|
| 3451 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
| 3452 |
break; |
break; |
| 3453 |
|
|
| 3599 |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43); |
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43); |
| 3600 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 3601 |
if (fi >= max || eptr >= md->end_subject || |
if (fi >= max || eptr >= md->end_subject || |
| 3602 |
((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr))) |
(ctype == OP_ANY && IS_NEWLINE(eptr))) |
| 3603 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
| 3604 |
|
|
| 3605 |
c = *eptr++; |
c = *eptr++; |
| 3606 |
switch(ctype) |
switch(ctype) |
| 3607 |
{ |
{ |
| 3608 |
case OP_ANY: /* This is the DOTALL case */ |
case OP_ANY: /* This is the non-NL case */ |
| 3609 |
break; |
case OP_ALLANY: |
|
|
|
| 3610 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
| 3611 |
break; |
break; |
| 3612 |
|
|
| 3860 |
case OP_ANY: |
case OP_ANY: |
| 3861 |
if (max < INT_MAX) |
if (max < INT_MAX) |
| 3862 |
{ |
{ |
| 3863 |
if ((ims & PCRE_DOTALL) == 0) |
for (i = min; i < max; i++) |
|
{ |
|
|
for (i = min; i < max; i++) |
|
|
{ |
|
|
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
|
|
eptr++; |
|
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
|
} |
|
|
} |
|
|
else |
|
| 3864 |
{ |
{ |
| 3865 |
for (i = min; i < max; i++) |
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
| 3866 |
{ |
eptr++; |
| 3867 |
if (eptr >= md->end_subject) break; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
eptr++; |
|
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
|
} |
|
| 3868 |
} |
} |
| 3869 |
} |
} |
| 3870 |
|
|
| 3872 |
|
|
| 3873 |
else |
else |
| 3874 |
{ |
{ |
| 3875 |
if ((ims & PCRE_DOTALL) == 0) |
for (i = min; i < max; i++) |
| 3876 |
{ |
{ |
| 3877 |
for (i = min; i < max; i++) |
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
| 3878 |
{ |
eptr++; |
| 3879 |
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
eptr++; |
|
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
|
|
} |
|
| 3880 |
} |
} |
| 3881 |
else |
} |
| 3882 |
|
break; |
| 3883 |
|
|
| 3884 |
|
case OP_ALLANY: |
| 3885 |
|
if (max < INT_MAX) |
| 3886 |
|
{ |
| 3887 |
|
for (i = min; i < max; i++) |
| 3888 |
{ |
{ |
| 3889 |
eptr = md->end_subject; |
if (eptr >= md->end_subject) break; |
| 3890 |
|
eptr++; |
| 3891 |
|
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
| 3892 |
} |
} |
| 3893 |
} |
} |
| 3894 |
|
else eptr = md->end_subject; /* Unlimited UTF-8 repeat */ |
| 3895 |
break; |
break; |
| 3896 |
|
|
| 3897 |
/* The byte case is the same as non-UTF8 */ |
/* The byte case is the same as non-UTF8 */ |
| 4079 |
switch(ctype) |
switch(ctype) |
| 4080 |
{ |
{ |
| 4081 |
case OP_ANY: |
case OP_ANY: |
| 4082 |
if ((ims & PCRE_DOTALL) == 0) |
for (i = min; i < max; i++) |
| 4083 |
{ |
{ |
| 4084 |
for (i = min; i < max; i++) |
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
| 4085 |
{ |
eptr++; |
|
if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break; |
|
|
eptr++; |
|
|
} |
|
|
break; |
|
| 4086 |
} |
} |
| 4087 |
/* For DOTALL case, fall through and treat as \C */ |
break; |
| 4088 |
|
|
| 4089 |
|
case OP_ALLANY: |
| 4090 |
case OP_ANYBYTE: |
case OP_ANYBYTE: |
| 4091 |
c = max - min; |
c = max - min; |
| 4092 |
if (c > (unsigned int)(md->end_subject - eptr)) |
if (c > (unsigned int)(md->end_subject - eptr)) |
| 4462 |
|
|
| 4463 |
md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; |
md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; |
| 4464 |
utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0; |
utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0; |
| 4465 |
|
md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0; |
| 4466 |
|
|
| 4467 |
md->notbol = (options & PCRE_NOTBOL) != 0; |
md->notbol = (options & PCRE_NOTBOL) != 0; |
| 4468 |
md->noteol = (options & PCRE_NOTEOL) != 0; |
md->noteol = (options & PCRE_NOTEOL) != 0; |