Kaydet (Commit) 6aa42579 authored tarafından Barry Warsaw's avatar Barry Warsaw

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.
üst a61f4ac1
...@@ -489,8 +489,19 @@ PyPcre_expand(self, args) ...@@ -489,8 +489,19 @@ PyPcre_expand(self, args)
if (start!=i) if (start!=i)
{ {
PyList_Append(results, int status;
PyString_FromStringAndSize((char *)repl+start, i-start)); 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; total_len += i-start;
} }
i++; i++;
...@@ -574,7 +585,19 @@ PyPcre_expand(self, args) ...@@ -574,7 +585,19 @@ PyPcre_expand(self, args)
if (start!=i) 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; total_len += i-start;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment