| 5810 |
const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], |
const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], |
| 5811 |
NULL, 0, FALSE); |
NULL, 0, FALSE); |
| 5812 |
register int op = *scode; |
register int op = *scode; |
| 5813 |
|
|
| 5814 |
|
/* If we are at the start of a conditional group, skip over the condition. |
| 5815 |
|
before inspecting the first opcode after the condition. */ |
| 5816 |
|
|
| 5817 |
|
if (op == OP_COND) |
| 5818 |
|
{ |
| 5819 |
|
scode += 1 + LINK_SIZE; |
| 5820 |
|
switch (*scode) |
| 5821 |
|
{ |
| 5822 |
|
case OP_CREF: |
| 5823 |
|
case OP_RREF: |
| 5824 |
|
scode += 3; |
| 5825 |
|
break; |
| 5826 |
|
|
| 5827 |
|
case OP_DEF: |
| 5828 |
|
scode += 1; |
| 5829 |
|
break; |
| 5830 |
|
|
| 5831 |
|
default: /* Assertion */ |
| 5832 |
|
do scode += GET(scode, 1); while (*scode == OP_ALT); |
| 5833 |
|
break; |
| 5834 |
|
} |
| 5835 |
|
|
| 5836 |
|
scode = first_significant_code(scode, NULL, 0, FALSE); |
| 5837 |
|
op = *scode; |
| 5838 |
|
} |
| 5839 |
|
|
| 5840 |
/* Non-capturing brackets */ |
/* Non-capturing brackets */ |
| 5841 |
|
|
| 5855 |
|
|
| 5856 |
/* Other brackets */ |
/* Other brackets */ |
| 5857 |
|
|
| 5858 |
else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND) |
else if (op == OP_ASSERT || op == OP_ONCE) |
| 5859 |
{ if (!is_startline(scode, bracket_map, backref_map)) return FALSE; } |
{ |
| 5860 |
|
if (!is_startline(scode, bracket_map, backref_map)) return FALSE; |
| 5861 |
|
} |
| 5862 |
|
|
| 5863 |
/* .* means "start at start or after \n" if it isn't in brackets that |
/* .* means "start at start or after \n" if it isn't in brackets that |
| 5864 |
may be referenced. */ |
may be referenced. */ |