| 88 |
register pcre_uchar *cc = (pcre_uchar *)code + 1 + LINK_SIZE; |
register pcre_uchar *cc = (pcre_uchar *)code + 1 + LINK_SIZE; |
| 89 |
|
|
| 90 |
if (*code == OP_CBRA || *code == OP_SCBRA || |
if (*code == OP_CBRA || *code == OP_SCBRA || |
| 91 |
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) cc += 2; |
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) cc += IMM2_SIZE; |
| 92 |
|
|
| 93 |
/* 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 |
| 94 |
branch, check the length against that of the other branches. */ |
branch, check the length against that of the other branches. */ |
| 243 |
case OP_NOTEXACT: |
case OP_NOTEXACT: |
| 244 |
case OP_NOTEXACTI: |
case OP_NOTEXACTI: |
| 245 |
branchlength += GET2(cc,1); |
branchlength += GET2(cc,1); |
| 246 |
cc += 4; |
cc += 2 + IMM2_SIZE; |
| 247 |
#ifdef SUPPORT_UTF8 |
#ifdef SUPPORT_UTF8 |
| 248 |
if (utf8 && cc[-1] >= 0xc0) cc += PRIV(utf8_table4)[cc[-1] & 0x3f]; |
if (utf8 && cc[-1] >= 0xc0) cc += PRIV(utf8_table4)[cc[-1] & 0x3f]; |
| 249 |
#endif |
#endif |
| 251 |
|
|
| 252 |
case OP_TYPEEXACT: |
case OP_TYPEEXACT: |
| 253 |
branchlength += GET2(cc,1); |
branchlength += GET2(cc,1); |
| 254 |
cc += (cc[3] == OP_PROP || cc[3] == OP_NOTPROP)? 6 : 4; |
cc += 2 + IMM2_SIZE + ((cc[1 + IMM2_SIZE] == OP_PROP |
| 255 |
|
|| cc[1 + IMM2_SIZE] == OP_NOTPROP)? 2 : 0); |
| 256 |
break; |
break; |
| 257 |
|
|
| 258 |
/* Handle single-char non-literal matchers */ |
/* Handle single-char non-literal matchers */ |
| 315 |
case OP_TYPEUPTO: |
case OP_TYPEUPTO: |
| 316 |
case OP_TYPEMINUPTO: |
case OP_TYPEMINUPTO: |
| 317 |
case OP_TYPEPOSUPTO: |
case OP_TYPEPOSUPTO: |
| 318 |
if (cc[3] == OP_PROP || cc[3] == OP_NOTPROP) cc += 2; |
if (cc[1 + IMM2_SIZE] == OP_PROP |
| 319 |
|
|| cc[1 + IMM2_SIZE] == OP_NOTPROP) cc += 2; |
| 320 |
cc += PRIV(OP_lengths)[op]; |
cc += PRIV(OP_lengths)[op]; |
| 321 |
break; |
break; |
| 322 |
|
|
| 349 |
case OP_CRRANGE: |
case OP_CRRANGE: |
| 350 |
case OP_CRMINRANGE: |
case OP_CRMINRANGE: |
| 351 |
branchlength += GET2(cc,1); |
branchlength += GET2(cc,1); |
| 352 |
cc += 5; |
cc += 1 + 2 * IMM2_SIZE; |
| 353 |
break; |
break; |
| 354 |
|
|
| 355 |
default: |
default: |
| 388 |
} |
} |
| 389 |
} |
} |
| 390 |
else d = 0; |
else d = 0; |
| 391 |
cc += 3; |
cc += 1 + IMM2_SIZE; |
| 392 |
|
|
| 393 |
/* Handle repeated back references */ |
/* Handle repeated back references */ |
| 394 |
|
|
| 411 |
case OP_CRRANGE: |
case OP_CRRANGE: |
| 412 |
case OP_CRMINRANGE: |
case OP_CRMINRANGE: |
| 413 |
min = GET2(cc, 1); |
min = GET2(cc, 1); |
| 414 |
cc += 5; |
cc += 1 + 2 * IMM2_SIZE; |
| 415 |
break; |
break; |
| 416 |
|
|
| 417 |
default: |
default: |
| 703 |
const pcre_uchar *tcode = code + 1 + LINK_SIZE; |
const pcre_uchar *tcode = code + 1 + LINK_SIZE; |
| 704 |
|
|
| 705 |
if (*code == OP_CBRA || *code == OP_SCBRA || |
if (*code == OP_CBRA || *code == OP_SCBRA || |
| 706 |
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) tcode += 2; |
*code == OP_CBRAPOS || *code == OP_SCBRAPOS) tcode += IMM2_SIZE; |
| 707 |
|
|
| 708 |
while (try_next) /* Loop for items in this branch */ |
while (try_next) /* Loop for items in this branch */ |
| 709 |
{ |
{ |
| 906 |
case OP_UPTO: |
case OP_UPTO: |
| 907 |
case OP_MINUPTO: |
case OP_MINUPTO: |
| 908 |
case OP_POSUPTO: |
case OP_POSUPTO: |
| 909 |
tcode = set_table_bit(start_bits, tcode + 3, FALSE, cd, utf8); |
tcode = set_table_bit(start_bits, tcode + 1 + IMM2_SIZE, FALSE, cd, utf8); |
| 910 |
break; |
break; |
| 911 |
|
|
| 912 |
case OP_UPTOI: |
case OP_UPTOI: |
| 913 |
case OP_MINUPTOI: |
case OP_MINUPTOI: |
| 914 |
case OP_POSUPTOI: |
case OP_POSUPTOI: |
| 915 |
tcode = set_table_bit(start_bits, tcode + 3, TRUE, cd, utf8); |
tcode = set_table_bit(start_bits, tcode + 1 + IMM2_SIZE, TRUE, cd, utf8); |
| 916 |
break; |
break; |
| 917 |
|
|
| 918 |
/* At least one single char sets the bit and stops */ |
/* At least one single char sets the bit and stops */ |
| 919 |
|
|
| 920 |
case OP_EXACT: |
case OP_EXACT: |
| 921 |
tcode += 2; |
tcode += IMM2_SIZE; |
| 922 |
/* Fall through */ |
/* Fall through */ |
| 923 |
case OP_CHAR: |
case OP_CHAR: |
| 924 |
case OP_PLUS: |
case OP_PLUS: |
| 929 |
break; |
break; |
| 930 |
|
|
| 931 |
case OP_EXACTI: |
case OP_EXACTI: |
| 932 |
tcode += 2; |
tcode += IMM2_SIZE; |
| 933 |
/* Fall through */ |
/* Fall through */ |
| 934 |
case OP_CHARI: |
case OP_CHARI: |
| 935 |
case OP_PLUSI: |
case OP_PLUSI: |
| 1028 |
break; |
break; |
| 1029 |
|
|
| 1030 |
case OP_TYPEEXACT: |
case OP_TYPEEXACT: |
| 1031 |
tcode += 3; |
tcode += 1 + IMM2_SIZE; |
| 1032 |
break; |
break; |
| 1033 |
|
|
| 1034 |
/* Zero or more repeats of character types set the bits and then |
/* Zero or more repeats of character types set the bits and then |
| 1037 |
case OP_TYPEUPTO: |
case OP_TYPEUPTO: |
| 1038 |
case OP_TYPEMINUPTO: |
case OP_TYPEMINUPTO: |
| 1039 |
case OP_TYPEPOSUPTO: |
case OP_TYPEPOSUPTO: |
| 1040 |
tcode += 2; /* Fall through */ |
tcode += IMM2_SIZE; /* Fall through */ |
| 1041 |
|
|
| 1042 |
case OP_TYPESTAR: |
case OP_TYPESTAR: |
| 1043 |
case OP_TYPEMINSTAR: |
case OP_TYPEMINSTAR: |
| 1180 |
|
|
| 1181 |
case OP_CRRANGE: |
case OP_CRRANGE: |
| 1182 |
case OP_CRMINRANGE: |
case OP_CRMINRANGE: |
| 1183 |
if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5; |
if (GET2(tcode, 1) == 0) tcode += 1 + 2 * IMM2_SIZE; |
| 1184 |
else try_next = FALSE; |
else try_next = FALSE; |
| 1185 |
break; |
break; |
| 1186 |
|
|