| 1082 |
cb.capture_top = offset_top/2; |
cb.capture_top = offset_top/2; |
| 1083 |
cb.capture_last = md->capture_last; |
cb.capture_last = md->capture_last; |
| 1084 |
cb.callout_data = md->callout_data; |
cb.callout_data = md->callout_data; |
| 1085 |
cb.mark = markptr; |
cb.mark = markptr; |
| 1086 |
if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH); |
if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH); |
| 1087 |
if (rrc < 0) RRETURN(rrc); |
if (rrc < 0) RRETURN(rrc); |
| 1088 |
} |
} |
| 1477 |
cb.capture_top = offset_top/2; |
cb.capture_top = offset_top/2; |
| 1478 |
cb.capture_last = md->capture_last; |
cb.capture_last = md->capture_last; |
| 1479 |
cb.callout_data = md->callout_data; |
cb.callout_data = md->callout_data; |
| 1480 |
cb.mark = markptr; |
cb.mark = markptr; |
| 1481 |
if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH); |
if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH); |
| 1482 |
if (rrc < 0) RRETURN(rrc); |
if (rrc < 0) RRETURN(rrc); |
| 1483 |
} |
} |
| 1505 |
{ |
{ |
| 1506 |
recursion_info *ri; |
recursion_info *ri; |
| 1507 |
int recno; |
int recno; |
| 1508 |
|
|
| 1509 |
callpat = md->start_code + GET(ecode, 1); |
callpat = md->start_code + GET(ecode, 1); |
| 1510 |
recno = (callpat == md->start_code)? 0 : |
recno = (callpat == md->start_code)? 0 : |
| 1511 |
GET2(callpat, 1 + LINK_SIZE); |
GET2(callpat, 1 + LINK_SIZE); |
| 1512 |
|
|
| 1513 |
/* Check for repeating a recursion without advancing the subject pointer. |
/* Check for repeating a recursion without advancing the subject pointer. |
| 1514 |
This should catch convoluted mutual recursions. (Some simple cases are |
This should catch convoluted mutual recursions. (Some simple cases are |
| 1515 |
caught at compile time.) */ |
caught at compile time.) */ |
| 1516 |
|
|
| 1517 |
for (ri = md->recursive; ri != NULL; ri = ri->prevrec) |
for (ri = md->recursive; ri != NULL; ri = ri->prevrec) |
| 1518 |
if (recno == ri->group_num && eptr == ri->subject_position) |
if (recno == ri->group_num && eptr == ri->subject_position) |
| 1519 |
RRETURN(PCRE_ERROR_RECURSELOOP); |
RRETURN(PCRE_ERROR_RECURSELOOP); |
| 1520 |
|
|
| 1521 |
/* Add to "recursing stack" */ |
/* Add to "recursing stack" */ |
| 2033 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
| 2034 |
MRRETURN(MATCH_NOMATCH); |
MRRETURN(MATCH_NOMATCH); |
| 2035 |
} |
} |
| 2036 |
eptr++; |
eptr++; |
| 2037 |
ecode++; |
ecode++; |
| 2038 |
break; |
break; |
| 2039 |
|
|
| 5182 |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++; |
| 5183 |
} |
} |
| 5184 |
} |
} |
| 5185 |
else |
else |
| 5186 |
{ |
{ |
| 5187 |
eptr = md->end_subject; /* Unlimited UTF-8 repeat */ |
eptr = md->end_subject; /* Unlimited UTF-8 repeat */ |
| 5188 |
SCHECK_PARTIAL(); |
SCHECK_PARTIAL(); |
| 5189 |
} |
} |
| 5190 |
break; |
break; |
| 5191 |
|
|
| 5192 |
/* The byte case is the same as non-UTF8 */ |
/* The byte case is the same as non-UTF8 */ |
| 6388 |
the pattern to -1 for backwards compatibility. It is documented that this |
the pattern to -1 for backwards compatibility. It is documented that this |
| 6389 |
happens. In earlier versions, the whole set of potential capturing offsets |
happens. In earlier versions, the whole set of potential capturing offsets |
| 6390 |
was set to -1 each time round the loop, but this is handled differently now. |
was set to -1 each time round the loop, but this is handled differently now. |
| 6391 |
"Gaps" are set to -1 dynamically instead (this fixes a bug). Thus, it is only |
"Gaps" are set to -1 dynamically instead (this fixes a bug). Thus, it is only |
| 6392 |
those at the end that need unsetting here. We can't just unset them all at |
those at the end that need unsetting here. We can't just unset them all at |
| 6393 |
the start of the whole thing because they may get set in one branch that is |
the start of the whole thing because they may get set in one branch that is |
| 6394 |
not the final matching branch. */ |
not the final matching branch. */ |