| 4248 |
*errorcodeptr = ERR58; |
*errorcodeptr = ERR58; |
| 4249 |
goto FAILED; |
goto FAILED; |
| 4250 |
} |
} |
| 4251 |
if (refsign == '-') |
recno = (refsign == '-')? |
| 4252 |
|
cd->bracount - recno + 1 : recno +cd->bracount; |
| 4253 |
|
if (recno <= 0 || recno > cd->final_bracount) |
| 4254 |
{ |
{ |
| 4255 |
recno = cd->bracount - recno + 1; |
*errorcodeptr = ERR15; |
| 4256 |
if (recno <= 0) |
goto FAILED; |
|
{ |
|
|
*errorcodeptr = ERR15; |
|
|
goto FAILED; |
|
|
} |
|
| 4257 |
} |
} |
|
else recno += cd->bracount; |
|
| 4258 |
PUT2(code, 2+LINK_SIZE, recno); |
PUT2(code, 2+LINK_SIZE, recno); |
| 4259 |
break; |
break; |
| 4260 |
} |
} |
| 4326 |
skipbytes = 1; |
skipbytes = 1; |
| 4327 |
} |
} |
| 4328 |
|
|
| 4329 |
/* Check for the "name" actually being a subpattern number. */ |
/* Check for the "name" actually being a subpattern number. We are |
| 4330 |
|
in the second pass here, so final_bracount is set. */ |
| 4331 |
|
|
| 4332 |
else if (recno > 0) |
else if (recno > 0 && recno <= cd->final_bracount) |
| 4333 |
{ |
{ |
| 4334 |
PUT2(code, 2+LINK_SIZE, recno); |
PUT2(code, 2+LINK_SIZE, recno); |
| 4335 |
} |
} |
| 5937 |
no longer needed, so hopefully this workspace will never overflow, though there |
no longer needed, so hopefully this workspace will never overflow, though there |
| 5938 |
is a test for its doing so. */ |
is a test for its doing so. */ |
| 5939 |
|
|
| 5940 |
cd->bracount = 0; |
cd->bracount = cd->final_bracount = 0; |
| 5941 |
cd->names_found = 0; |
cd->names_found = 0; |
| 5942 |
cd->name_entry_size = 0; |
cd->name_entry_size = 0; |
| 5943 |
cd->name_table = NULL; |
cd->name_table = NULL; |
| 6014 |
field; this time it's used for remembering forward references to subpatterns. |
field; this time it's used for remembering forward references to subpatterns. |
| 6015 |
*/ |
*/ |
| 6016 |
|
|
| 6017 |
|
cd->final_bracount = cd->bracount; /* Save for checking forward references */ |
| 6018 |
cd->bracount = 0; |
cd->bracount = 0; |
| 6019 |
cd->names_found = 0; |
cd->names_found = 0; |
| 6020 |
cd->name_table = (uschar *)re + re->name_table_offset; |
cd->name_table = (uschar *)re + re->name_table_offset; |