From 6aa42579be55f82141b183d547f71ce10303677a Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Mon, 1 Feb 1999 17:09:00 +0000 Subject: PyPcre_expand(): Fixed two memory leaks, where a PyString_FromString() was appended to a list. Lists are reference count neutral, so the string must be DECREF'd. Also added some checks for the return value of PyList_Append(). Note: there are still some memory problems reported by Purify (I get two Array Bounds Reads still and an Unitialized Memory Read). Also, in scanning the code, there appears to be some potential problems where return values aren't checked. To much to attack now though. --- Modules/pcremodule.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/Modules/pcremodule.c b/Modules/pcremodule.c index fa98696..3b61697 100644 --- a/Modules/pcremodule.c +++ b/Modules/pcremodule.c @@ -489,8 +489,19 @@ PyPcre_expand(self, args) if (start!=i) { - PyList_Append(results, - PyString_FromStringAndSize((char *)repl+start, i-start)); + int status; + PyObject *s = PyString_FromStringAndSize( + (char *)repl+start, i-start); + if (s == NULL) { + Py_DECREF(results); + return NULL; + } + status = PyList_Append(results, s); + Py_DECREF(s); + if (status < 0) { + Py_DECREF(results); + return NULL; + } total_len += i-start; } i++; @@ -574,7 +585,19 @@ PyPcre_expand(self, args) if (start!=i) { - PyList_Append(results, PyString_FromStringAndSize((char *)repl+start, i-start)); + int status; + PyObject *s = PyString_FromStringAndSize((char *)repl+start, + i-start); + if (s == NULL) { + Py_DECREF(results); + return NULL; + } + status = PyList_Append(results, s); + Py_DECREF(s); + if (status < 0) { + Py_DECREF(results); + return NULL; + } total_len += i-start; } -- cgit v0.12