| 85 |
register int branchlength = 0; |
register int branchlength = 0; |
| 86 |
register uschar *cc = (uschar *)code + 1 + LINK_SIZE; |
register uschar *cc = (uschar *)code + 1 + LINK_SIZE; |
| 87 |
|
|
| 88 |
if (*code == OP_CBRA || *code == OP_SCBRA) cc += 2; |
if (*code == OP_CBRA || *code == OP_SCBRA || |
| 89 |
|
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) cc += 2; |
| 90 |
|
|
| 91 |
/* Scan along the opcodes for this branch. If we get to the end of the |
/* Scan along the opcodes for this branch. If we get to the end of the |
| 92 |
branch, check the length against that of the other branches. */ |
branch, check the length against that of the other branches. */ |
| 120 |
case OP_SCBRA: |
case OP_SCBRA: |
| 121 |
case OP_BRA: |
case OP_BRA: |
| 122 |
case OP_SBRA: |
case OP_SBRA: |
| 123 |
|
case OP_CBRAPOS: |
| 124 |
|
case OP_SCBRAPOS: |
| 125 |
|
case OP_BRAPOS: |
| 126 |
|
case OP_SBRAPOS: |
| 127 |
case OP_ONCE: |
case OP_ONCE: |
| 128 |
d = find_minlength(cc, startcode, options); |
d = find_minlength(cc, startcode, options); |
| 129 |
if (d < 0) return d; |
if (d < 0) return d; |
| 140 |
case OP_KET: |
case OP_KET: |
| 141 |
case OP_KETRMAX: |
case OP_KETRMAX: |
| 142 |
case OP_KETRMIN: |
case OP_KETRMIN: |
| 143 |
|
case OP_KETRPOS: |
| 144 |
case OP_END: |
case OP_END: |
| 145 |
if (length < 0 || (!had_recurse && branchlength < length)) |
if (length < 0 || (!had_recurse && branchlength < length)) |
| 146 |
length = branchlength; |
length = branchlength; |
| 185 |
|
|
| 186 |
case OP_BRAZERO: |
case OP_BRAZERO: |
| 187 |
case OP_BRAMINZERO: |
case OP_BRAMINZERO: |
| 188 |
|
case OP_BRAPOSZERO: |
| 189 |
case OP_SKIPZERO: |
case OP_SKIPZERO: |
| 190 |
cc += _pcre_OP_lengths[*cc]; |
cc += _pcre_OP_lengths[*cc]; |
| 191 |
do cc += GET(cc, 1); while (*cc == OP_ALT); |
do cc += GET(cc, 1); while (*cc == OP_ALT); |
| 382 |
min = 0; |
min = 0; |
| 383 |
cc++; |
cc++; |
| 384 |
break; |
break; |
| 385 |
|
|
| 386 |
|
case OP_CRPLUS: |
| 387 |
|
case OP_CRMINPLUS: |
| 388 |
|
min = 1; |
| 389 |
|
cc++; |
| 390 |
|
break; |
| 391 |
|
|
| 392 |
case OP_CRRANGE: |
case OP_CRRANGE: |
| 393 |
case OP_CRMINRANGE: |
case OP_CRMINRANGE: |
| 394 |
min = GET2(cc, 1); |
min = GET2(cc, 1); |
| 677 |
|
|
| 678 |
do |
do |
| 679 |
{ |
{ |
|
const uschar *tcode = code + (((int)*code == OP_CBRA)? 3:1) + LINK_SIZE; |
|
| 680 |
BOOL try_next = TRUE; |
BOOL try_next = TRUE; |
| 681 |
|
const uschar *tcode = code + 1 + LINK_SIZE; |
| 682 |
|
|
| 683 |
|
if (*code == OP_CBRA || *code == OP_SCBRA || |
| 684 |
|
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) tcode += 2; |
| 685 |
|
|
| 686 |
while (try_next) /* Loop for items in this branch */ |
while (try_next) /* Loop for items in this branch */ |
| 687 |
{ |
{ |
| 702 |
case OP_SBRA: |
case OP_SBRA: |
| 703 |
case OP_CBRA: |
case OP_CBRA: |
| 704 |
case OP_SCBRA: |
case OP_SCBRA: |
| 705 |
|
case OP_BRAPOS: |
| 706 |
|
case OP_SBRAPOS: |
| 707 |
|
case OP_CBRAPOS: |
| 708 |
|
case OP_SCBRAPOS: |
| 709 |
case OP_ONCE: |
case OP_ONCE: |
| 710 |
case OP_ASSERT: |
case OP_ASSERT: |
| 711 |
rc = set_start_bits(tcode, start_bits, utf8, cd); |
rc = set_start_bits(tcode, start_bits, utf8, cd); |
| 732 |
case OP_KET: |
case OP_KET: |
| 733 |
case OP_KETRMAX: |
case OP_KETRMAX: |
| 734 |
case OP_KETRMIN: |
case OP_KETRMIN: |
| 735 |
|
case OP_KETRPOS: |
| 736 |
return SSB_CONTINUE; |
return SSB_CONTINUE; |
| 737 |
|
|
| 738 |
/* Skip over callout */ |
/* Skip over callout */ |
| 754 |
|
|
| 755 |
case OP_BRAZERO: |
case OP_BRAZERO: |
| 756 |
case OP_BRAMINZERO: |
case OP_BRAMINZERO: |
| 757 |
|
case OP_BRAPOSZERO: |
| 758 |
if (set_start_bits(++tcode, start_bits, utf8, cd) == SSB_FAIL) |
if (set_start_bits(++tcode, start_bits, utf8, cd) == SSB_FAIL) |
| 759 |
return SSB_FAIL; |
return SSB_FAIL; |
| 760 |
/* ========================================================================= |
/* ========================================================================= |