[Python-checkins] r52164 - in python/branches/release25-maint: Misc/NEWS Modules/_sre.c
andrew.kuchling
python-checkins at python.org
Thu Oct 5 19:26:34 CEST 2006
Author: andrew.kuchling
Date: Thu Oct 5 19:26:33 2006
New Revision: 52164
Modified:
python/branches/release25-maint/Misc/NEWS
python/branches/release25-maint/Modules/_sre.c
Log:
[Backport to 2-5maint of r52147 | andrew.kuchling ; the buildbots seem OK
with this change.]
Cause a PyObject_Malloc() failure to trigger a MemoryError, and then
add 'if (PyErr_Occurred())' checks to various places so that NULL is
returned properly.
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS (original)
+++ python/branches/release25-maint/Misc/NEWS Thu Oct 5 19:26:33 2006
@@ -49,6 +49,7 @@
- Fix itertools.count(n) to work with negative numbers again.
+- Make regex engine raise MemoryError if allocating memory fails.
Library
-------
Modified: python/branches/release25-maint/Modules/_sre.c
==============================================================================
--- python/branches/release25-maint/Modules/_sre.c (original)
+++ python/branches/release25-maint/Modules/_sre.c Thu Oct 5 19:26:33 2006
@@ -1166,9 +1166,10 @@
/* install new repeat context */
ctx->u.rep = (SRE_REPEAT*) PyObject_MALLOC(sizeof(*ctx->u.rep));
- /* XXX(nnorwitz): anything else we need to do on error? */
- if (!ctx->u.rep)
+ if (!ctx->u.rep) {
+ PyErr_NoMemory();
RETURN_FAILURE;
+ }
ctx->u.rep->count = -1;
ctx->u.rep->pattern = ctx->pattern;
ctx->u.rep->prev = state->repeat;
@@ -1884,6 +1885,8 @@
}
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
+ if (PyErr_Occurred())
+ return NULL;
state_fini(&state);
@@ -1922,6 +1925,9 @@
state_fini(&state);
+ if (PyErr_Occurred())
+ return NULL;
+
return pattern_new_match(self, &state, status);
}
@@ -2071,6 +2077,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -2198,6 +2207,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -2347,6 +2359,9 @@
#endif
}
+ if (PyErr_Occurred())
+ goto error;
+
if (status <= 0) {
if (status == 0)
break;
@@ -3250,6 +3265,8 @@
status = sre_umatch(state, PatternObject_GetCode(self->pattern));
#endif
}
+ if (PyErr_Occurred())
+ return NULL;
match = pattern_new_match((PatternObject*) self->pattern,
state, status);
@@ -3281,6 +3298,8 @@
status = sre_usearch(state, PatternObject_GetCode(self->pattern));
#endif
}
+ if (PyErr_Occurred())
+ return NULL;
match = pattern_new_match((PatternObject*) self->pattern,
state, status);
More information about the Python-checkins
mailing list