mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
fix possible refleaks if PyUnicode_READY fails
This commit is contained in:
parent
bac79498c8
commit
c8d8b8861e
1 changed files with 15 additions and 3 deletions
|
@ -2488,8 +2488,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
assert(obj);
|
assert(obj);
|
||||||
str = PyObject_Str(obj);
|
str = PyObject_Str(obj);
|
||||||
if (!str || PyUnicode_READY(str) == -1)
|
if (!str)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
if (PyUnicode_READY(str) == -1) {
|
||||||
|
Py_DECREF(str);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
argmaxchar = PyUnicode_MAX_CHAR_VALUE(str);
|
argmaxchar = PyUnicode_MAX_CHAR_VALUE(str);
|
||||||
maxchar = Py_MAX(maxchar, argmaxchar);
|
maxchar = Py_MAX(maxchar, argmaxchar);
|
||||||
n += PyUnicode_GET_LENGTH(str);
|
n += PyUnicode_GET_LENGTH(str);
|
||||||
|
@ -2503,8 +2507,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
|
||||||
PyObject *repr;
|
PyObject *repr;
|
||||||
assert(obj);
|
assert(obj);
|
||||||
repr = PyObject_Repr(obj);
|
repr = PyObject_Repr(obj);
|
||||||
if (!repr || PyUnicode_READY(repr) == -1)
|
if (!repr)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
if (PyUnicode_READY(repr) == -1) {
|
||||||
|
Py_DECREF(repr);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
argmaxchar = PyUnicode_MAX_CHAR_VALUE(repr);
|
argmaxchar = PyUnicode_MAX_CHAR_VALUE(repr);
|
||||||
maxchar = Py_MAX(maxchar, argmaxchar);
|
maxchar = Py_MAX(maxchar, argmaxchar);
|
||||||
n += PyUnicode_GET_LENGTH(repr);
|
n += PyUnicode_GET_LENGTH(repr);
|
||||||
|
@ -2518,8 +2526,12 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
|
||||||
PyObject *ascii;
|
PyObject *ascii;
|
||||||
assert(obj);
|
assert(obj);
|
||||||
ascii = PyObject_ASCII(obj);
|
ascii = PyObject_ASCII(obj);
|
||||||
if (!ascii || PyUnicode_READY(ascii) == -1)
|
if (!ascii)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
if (PyUnicode_READY(ascii) == -1) {
|
||||||
|
Py_DECREF(ascii);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
argmaxchar = PyUnicode_MAX_CHAR_VALUE(ascii);
|
argmaxchar = PyUnicode_MAX_CHAR_VALUE(ascii);
|
||||||
maxchar = Py_MAX(maxchar, argmaxchar);
|
maxchar = Py_MAX(maxchar, argmaxchar);
|
||||||
n += PyUnicode_GET_LENGTH(ascii);
|
n += PyUnicode_GET_LENGTH(ascii);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue