Commit bdaf729f authored by Gustavo Niemeyer's avatar Gustavo Niemeyer

Fixing bug #1072259 in SRE.

parent ae0e4fd3
...@@ -1024,9 +1024,10 @@ entrance: ...@@ -1024,9 +1024,10 @@ entrance:
state->ptr = ctx->ptr; state->ptr = ctx->ptr;
ctx->count = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]); ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]);
RETURN_ON_ERROR(ctx->count); RETURN_ON_ERROR(ret);
DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
ctx->count = ret;
ctx->ptr += ctx->count; ctx->ptr += ctx->count;
/* when we arrive here, count contains the number of /* when we arrive here, count contains the number of
...@@ -1110,13 +1111,14 @@ entrance: ...@@ -1110,13 +1111,14 @@ entrance:
ctx->count = 0; ctx->count = 0;
else { else {
/* count using pattern min as the maximum */ /* count using pattern min as the maximum */
ctx->count = SRE_COUNT(state, ctx->pattern+3, ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[1]);
ctx->pattern[1]); RETURN_ON_ERROR(ret);
RETURN_ON_ERROR(ctx->count); DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
if (ctx->count < (int) ctx->pattern[1]) if (ret < (int) ctx->pattern[1])
/* didn't match minimum number of times */ /* didn't match minimum number of times */
RETURN_FAILURE; RETURN_FAILURE;
/* advance past minimum matches of repeat */ /* advance past minimum matches of repeat */
ctx->count = ret;
ctx->ptr += ctx->count; ctx->ptr += ctx->count;
} }
...@@ -1140,6 +1142,7 @@ entrance: ...@@ -1140,6 +1142,7 @@ entrance:
state->ptr = ctx->ptr; state->ptr = ctx->ptr;
ret = SRE_COUNT(state, ctx->pattern+3, 1); ret = SRE_COUNT(state, ctx->pattern+3, 1);
RETURN_ON_ERROR(ret); RETURN_ON_ERROR(ret);
DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos);
if (ret == 0) if (ret == 0)
break; break;
assert(ret == 1); assert(ret == 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment