summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo Niemeyer <gustavo@niemeyer.net>2004-12-02 16:15:39 (GMT)
committerGustavo Niemeyer <gustavo@niemeyer.net>2004-12-02 16:15:39 (GMT)
commit166878f5440befa45069a2764b94ae96e6dcad4a (patch)
tree47437cacf6222087e1bf90e8a0b68f86670f43a2
parent4901a1f267e9d632f85054ce8b21ff23bff305e1 (diff)
downloadcpython-166878f5440befa45069a2764b94ae96e6dcad4a.zip
cpython-166878f5440befa45069a2764b94ae96e6dcad4a.tar.gz
cpython-166878f5440befa45069a2764b94ae96e6dcad4a.tar.bz2
Fixing bug #1072259 in SRE.
-rw-r--r--Modules/_sre.c17
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);