| 1731 |
case OP_REF: |
case OP_REF: |
| 1732 |
{ |
{ |
| 1733 |
offset = GET2(ecode, 1) << 1; /* Doubled ref number */ |
offset = GET2(ecode, 1) << 1; /* Doubled ref number */ |
| 1734 |
ecode += 3; /* Advance past item */ |
ecode += 3; |
| 1735 |
|
|
| 1736 |
/* If the reference is unset, set the length to be longer than the amount |
/* If the reference is unset, there are two possibilities: |
| 1737 |
of subject left; this ensures that every attempt at a match fails. We |
|
| 1738 |
can't just fail here, because of the possibility of quantifiers with zero |
(a) In the default, Perl-compatible state, set the length to be longer |
| 1739 |
minima. */ |
than the amount of subject left; this ensures that every attempt at a |
| 1740 |
|
match fails. We can't just fail here, because of the possibility of |
| 1741 |
length = (offset >= offset_top || md->offset_vector[offset] < 0)? |
quantifiers with zero minima. |
| 1742 |
md->end_subject - eptr + 1 : |
|
| 1743 |
md->offset_vector[offset+1] - md->offset_vector[offset]; |
(b) If the JavaScript compatibility flag is set, set the length to zero |
| 1744 |
|
so that the back reference matches an empty string. |
| 1745 |
|
|
| 1746 |
|
Otherwise, set the length to the length of what was matched by the |
| 1747 |
|
referenced subpattern. */ |
| 1748 |
|
|
| 1749 |
|
if (offset >= offset_top || md->offset_vector[offset] < 0) |
| 1750 |
|
length = (md->jscript_compat)? 0 : md->end_subject - eptr + 1; |
| 1751 |
|
else |
| 1752 |
|
length = md->offset_vector[offset+1] - md->offset_vector[offset]; |
| 1753 |
|
|
| 1754 |
/* Set up for repetition, or handle the non-repeated case */ |
/* Set up for repetition, or handle the non-repeated case */ |
| 1755 |
|
|
| 4467 |
|
|
| 4468 |
md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; |
md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0; |
| 4469 |
utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0; |
utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0; |
| 4470 |
|
md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0; |
| 4471 |
|
|
| 4472 |
md->notbol = (options & PCRE_NOTBOL) != 0; |
md->notbol = (options & PCRE_NOTBOL) != 0; |
| 4473 |
md->noteol = (options & PCRE_NOTEOL) != 0; |
md->noteol = (options & PCRE_NOTEOL) != 0; |