From c8d8b8861e2cadec76c534e996cbf6330a6e81de Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 14 Jan 2012 13:37:31 -0500 Subject: [PATCH] fix possible refleaks if PyUnicode_READY fails --- Objects/unicodeobject.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 40c1bd8382..e97ce1f6e6 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2488,8 +2488,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) PyObject *str; assert(obj); str = PyObject_Str(obj); - if (!str || PyUnicode_READY(str) == -1) + if (!str) + goto fail; + if (PyUnicode_READY(str) == -1) { + Py_DECREF(str); goto fail; + } argmaxchar = PyUnicode_MAX_CHAR_VALUE(str); maxchar = Py_MAX(maxchar, argmaxchar); n += PyUnicode_GET_LENGTH(str); @@ -2503,8 +2507,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) PyObject *repr; assert(obj); repr = PyObject_Repr(obj); - if (!repr || PyUnicode_READY(repr) == -1) + if (!repr) + goto fail; + if (PyUnicode_READY(repr) == -1) { + Py_DECREF(repr); goto fail; + } argmaxchar = PyUnicode_MAX_CHAR_VALUE(repr); maxchar = Py_MAX(maxchar, argmaxchar); n += PyUnicode_GET_LENGTH(repr); @@ -2518,8 +2526,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) PyObject *ascii; assert(obj); ascii = PyObject_ASCII(obj); - if (!ascii || PyUnicode_READY(ascii) == -1) + if (!ascii) + goto fail; + if (PyUnicode_READY(ascii) == -1) { + Py_DECREF(ascii); goto fail; + } argmaxchar = PyUnicode_MAX_CHAR_VALUE(ascii); maxchar = Py_MAX(maxchar, argmaxchar); n += PyUnicode_GET_LENGTH(ascii); -- 2.40.0