diff options
author | Gustavo Niemeyer <gustavo@niemeyer.net> | 2004-12-02 16:15:39 (GMT) |
---|---|---|
committer | Gustavo Niemeyer <gustavo@niemeyer.net> | 2004-12-02 16:15:39 (GMT) |
commit | 166878f5440befa45069a2764b94ae96e6dcad4a (patch) | |
tree | 47437cacf6222087e1bf90e8a0b68f86670f43a2 | |
parent | 4901a1f267e9d632f85054ce8b21ff23bff305e1 (diff) | |
download | cpython-166878f5440befa45069a2764b94ae96e6dcad4a.zip cpython-166878f5440befa45069a2764b94ae96e6dcad4a.tar.gz cpython-166878f5440befa45069a2764b94ae96e6dcad4a.tar.bz2 |
Fixing bug #1072259 in SRE.
-rw-r--r-- | Modules/_sre.c | 17 |
1 files 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); |