summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2009-10-26 22:05:06 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2009-10-26 22:05:06 (GMT)
commit1daebdf82ce6b50a105ff37b6e279ce1390732f7 (patch)
treed00720b47d5adb0fdcd48579b9e3816d2ee545b7
parentf972488213c359e251d6a0b06759ce19ef33e48d (diff)
downloadcpython-1daebdf82ce6b50a105ff37b6e279ce1390732f7.zip
cpython-1daebdf82ce6b50a105ff37b6e279ce1390732f7.tar.gz
cpython-1daebdf82ce6b50a105ff37b6e279ce1390732f7.tar.bz2
Make sure memory is freed on error in complex_subtype_from_string.
-rw-r--r--Objects/complexobject.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index b541308..e5e07c1 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -750,10 +750,8 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
PyUnicode_GET_SIZE(v),
s_buffer,
- NULL)) {
- PyMem_FREE(s_buffer);
- return NULL;
- }
+ NULL))
+ goto error;
s = s_buffer;
len = strlen(s);
}
@@ -802,7 +800,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
if (PyErr_ExceptionMatches(PyExc_ValueError))
PyErr_Clear();
else
- return NULL;
+ goto error;
}
if (end != s) {
/* all 4 forms starting with <float> land here */
@@ -815,7 +813,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
if (PyErr_ExceptionMatches(PyExc_ValueError))
PyErr_Clear();
else
- return NULL;
+ goto error;
}
if (end != s)
/* <float><signed-float>j */
@@ -875,10 +873,11 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
return complex_subtype_from_doubles(type, x, y);
parse_error:
- if (s_buffer)
- PyMem_FREE(s_buffer);
PyErr_SetString(PyExc_ValueError,
"complex() arg is a malformed string");
+ error:
+ if (s_buffer)
+ PyMem_FREE(s_buffer);
return NULL;
}