| 1370 |
const uschar *ccode; |
const uschar *ccode; |
| 1371 |
|
|
| 1372 |
c = *code; |
c = *code; |
| 1373 |
|
|
| 1374 |
|
/* Groups with zero repeats can of course be empty; skip them. */ |
| 1375 |
|
|
| 1376 |
|
if (c == OP_BRAZERO || c == OP_BRAMINZERO) |
| 1377 |
|
{ |
| 1378 |
|
do code += GET(code, 1); while (*code == OP_ALT); |
| 1379 |
|
c = *code; |
| 1380 |
|
continue; |
| 1381 |
|
} |
| 1382 |
|
|
| 1383 |
|
/* For other groups, scan the branches. */ |
| 1384 |
|
|
| 1385 |
if (c == OP_BRA || c == OP_CBRA || c == OP_ONCE) |
if (c == OP_BRA || c == OP_CBRA || c == OP_ONCE) |
| 1386 |
{ |
{ |
| 1387 |
BOOL empty_branch; |
BOOL empty_branch; |
| 1398 |
} |
} |
| 1399 |
while (*code == OP_ALT); |
while (*code == OP_ALT); |
| 1400 |
if (!empty_branch) return FALSE; /* All branches are non-empty */ |
if (!empty_branch) return FALSE; /* All branches are non-empty */ |
| 1401 |
|
c = *code; |
|
/* Move past the KET and fudge things so that the increment in the "for" |
|
|
above has no effect. */ |
|
|
|
|
|
c = OP_END; |
|
|
code += 1 + LINK_SIZE - _pcre_OP_lengths[c]; |
|
| 1402 |
continue; |
continue; |
| 1403 |
} |
} |
| 1404 |
|
|