From 166878f5440befa45069a2764b94ae96e6dcad4a Mon Sep 17 00:00:00 2001 From: Gustavo Niemeyer Date: Thu, 2 Dec 2004 16:15:39 +0000 Subject: Fixing bug #1072259 in SRE. --- Modules/_sre.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Modules/_sre.c b/Modules/_sre.c index f4456b5..f97cb62 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1024,9 +1024,10 @@ entrance: state->ptr = ctx->ptr; - ctx->count = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]); - RETURN_ON_ERROR(ctx->count); - + ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[2]); + RETURN_ON_ERROR(ret); + DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); + ctx->count = ret; ctx->ptr += ctx->count; /* when we arrive here, count contains the number of @@ -1110,13 +1111,14 @@ entrance: ctx->count = 0; else { /* count using pattern min as the maximum */ - ctx->count = SRE_COUNT(state, ctx->pattern+3, - ctx->pattern[1]); - RETURN_ON_ERROR(ctx->count); - if (ctx->count < (int) ctx->pattern[1]) + ret = SRE_COUNT(state, ctx->pattern+3, ctx->pattern[1]); + RETURN_ON_ERROR(ret); + DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); + if (ret < (int) ctx->pattern[1]) /* didn't match minimum number of times */ RETURN_FAILURE; /* advance past minimum matches of repeat */ + ctx->count = ret; ctx->ptr += ctx->count; } @@ -1140,6 +1142,7 @@ entrance: state->ptr = ctx->ptr; ret = SRE_COUNT(state, ctx->pattern+3, 1); RETURN_ON_ERROR(ret); + DATA_LOOKUP_AT(SRE_MATCH_CONTEXT, ctx, ctx_pos); if (ret == 0) break; assert(ret == 1); -- cgit v0.12