| 561 |
uschar occhars[8]; |
uschar occhars[8]; |
| 562 |
#endif |
#endif |
| 563 |
|
|
| 564 |
|
int codelink; |
| 565 |
|
int condcode; |
| 566 |
int ctype; |
int ctype; |
| 567 |
int length; |
int length; |
| 568 |
int max; |
int max; |
| 789 |
|
|
| 790 |
case OP_COND: |
case OP_COND: |
| 791 |
case OP_SCOND: |
case OP_SCOND: |
| 792 |
|
codelink= GET(ecode, 1); |
| 793 |
|
|
| 794 |
/* Because of the way auto-callout works during compile, a callout item is |
/* Because of the way auto-callout works during compile, a callout item is |
| 795 |
inserted between OP_COND and an assertion condition. */ |
inserted between OP_COND and an assertion condition. */ |
| 796 |
|
|
| 817 |
ecode += _pcre_OP_lengths[OP_CALLOUT]; |
ecode += _pcre_OP_lengths[OP_CALLOUT]; |
| 818 |
} |
} |
| 819 |
|
|
| 820 |
|
condcode = ecode[LINK_SIZE+1]; |
| 821 |
|
|
| 822 |
/* Now see what the actual condition is */ |
/* Now see what the actual condition is */ |
| 823 |
|
|
| 824 |
if (ecode[LINK_SIZE+1] == OP_RREF) /* Recursion test */ |
if (condcode == OP_RREF) /* Recursion test */ |
| 825 |
{ |
{ |
| 826 |
offset = GET2(ecode, LINK_SIZE + 2); /* Recursion group number*/ |
offset = GET2(ecode, LINK_SIZE + 2); /* Recursion group number*/ |
| 827 |
condition = md->recursive != NULL && |
condition = md->recursive != NULL && |
| 829 |
ecode += condition? 3 : GET(ecode, 1); |
ecode += condition? 3 : GET(ecode, 1); |
| 830 |
} |
} |
| 831 |
|
|
| 832 |
else if (ecode[LINK_SIZE+1] == OP_CREF) /* Group used test */ |
else if (condcode == OP_CREF) /* Group used test */ |
| 833 |
{ |
{ |
| 834 |
offset = GET2(ecode, LINK_SIZE+2) << 1; /* Doubled ref number */ |
offset = GET2(ecode, LINK_SIZE+2) << 1; /* Doubled ref number */ |
| 835 |
condition = offset < offset_top && md->offset_vector[offset] >= 0; |
condition = offset < offset_top && md->offset_vector[offset] >= 0; |
| 836 |
ecode += condition? 3 : GET(ecode, 1); |
ecode += condition? 3 : GET(ecode, 1); |
| 837 |
} |
} |
| 838 |
|
|
| 839 |
else if (ecode[LINK_SIZE+1] == OP_DEF) /* DEFINE - always false */ |
else if (condcode == OP_DEF) /* DEFINE - always false */ |
| 840 |
{ |
{ |
| 841 |
condition = FALSE; |
condition = FALSE; |
| 842 |
ecode += GET(ecode, 1); |
ecode += GET(ecode, 1); |
| 863 |
else |
else |
| 864 |
{ |
{ |
| 865 |
condition = FALSE; |
condition = FALSE; |
| 866 |
ecode += GET(ecode, 1); |
ecode += codelink; |
| 867 |
} |
} |
| 868 |
} |
} |
| 869 |
|
|