--- code/trunk/pcre_compile.c 2010/06/16 10:51:15 545 +++ code/trunk/pcre_compile.c 2010/10/10 16:24:11 550 @@ -1724,9 +1724,12 @@ case OP_MARK: case OP_PRUNE_ARG: case OP_SKIP_ARG: - case OP_THEN_ARG: code += code[1]; break; + + case OP_THEN_ARG: + code += code[1+LINK_SIZE]; + break; } /* Add in the fixed length from the table */ @@ -1827,9 +1830,12 @@ case OP_MARK: case OP_PRUNE_ARG: case OP_SKIP_ARG: - case OP_THEN_ARG: code += code[1]; break; + + case OP_THEN_ARG: + code += code[1+LINK_SIZE]; + break; } /* Add in the fixed length from the table */ @@ -2105,10 +2111,13 @@ case OP_MARK: case OP_PRUNE_ARG: case OP_SKIP_ARG: - case OP_THEN_ARG: code += code[1]; break; + case OP_THEN_ARG: + code += code[1+LINK_SIZE]; + break; + /* None of the remaining opcodes are required to match a character. */ default: @@ -4808,7 +4817,12 @@ *errorcodeptr = ERR66; goto FAILED; } - *code++ = verbs[i].op; + *code = verbs[i].op; + if (*code++ == OP_THEN) + { + PUT(code, 0, code - bcptr->current_branch - 1); + code += LINK_SIZE; + } } else @@ -4818,7 +4832,12 @@ *errorcodeptr = ERR59; goto FAILED; } - *code++ = verbs[i].op_arg; + *code = verbs[i].op_arg; + if (*code++ == OP_THEN_ARG) + { + PUT(code, 0, code - bcptr->current_branch - 1); + code += LINK_SIZE; + } *code++ = arglen; memcpy(code, arg, arglen); code += arglen;