diff options
author | Thomas Wouters <thomas@python.org> | 2006-03-12 00:29:36 (GMT) |
---|---|---|
committer | Thomas Wouters <thomas@python.org> | 2006-03-12 00:29:36 (GMT) |
commit | a96affe1fc5085946ec5bd39a1cb852438ccded3 (patch) | |
tree | 27b80676c4a00ca8f6647ea4fab4de52cbf396f4 /Objects/unicodeobject.c | |
parent | 318af47512176fed74a3d7e0e51cdb1347418a98 (diff) | |
download | cpython-a96affe1fc5085946ec5bd39a1cb852438ccded3.zip cpython-a96affe1fc5085946ec5bd39a1cb852438ccded3.tar.gz cpython-a96affe1fc5085946ec5bd39a1cb852438ccded3.tar.bz2 |
- Reindent a confusingly indented piece of code (no intended code changes
there)
- Add missing DECREFs of inner-scope 'temp' variable
- Add various missing DECREFs by changing 'return NULL' into 'goto onError'
- Avoid double DECREF when last _PyUnicode_Resize() fails
Coverity found one of the missing DECREFs, but oddly enough not the others.
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r-- | Objects/unicodeobject.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index b044d68..52bff2d 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -7068,15 +7068,15 @@ PyObject *PyUnicode_Format(PyObject *format, /* nothing to do */; else if (PyString_Check(temp)) { /* convert to string to Unicode */ - unicode = PyUnicode_Decode(PyString_AS_STRING(temp), + unicode = PyUnicode_Decode(PyString_AS_STRING(temp), PyString_GET_SIZE(temp), - NULL, + NULL, "strict"); - Py_DECREF(temp); - temp = unicode; - if (temp == NULL) - goto onError; - } + Py_DECREF(temp); + temp = unicode; + if (temp == NULL) + goto onError; + } else { Py_DECREF(temp); PyErr_SetString(PyExc_TypeError, @@ -7172,11 +7172,13 @@ PyObject *PyUnicode_Format(PyObject *format, reslen += rescnt; if (reslen < 0) { Py_XDECREF(temp); - Py_DECREF(result); - return PyErr_NoMemory(); + PyErr_NoMemory(); + goto onError; + } + if (_PyUnicode_Resize(&result, reslen) < 0) { + Py_XDECREF(temp); + goto onError; } - if (_PyUnicode_Resize(&result, reslen) < 0) - return NULL; res = PyUnicode_AS_UNICODE(result) + reslen - rescnt; } @@ -7226,6 +7228,7 @@ PyObject *PyUnicode_Format(PyObject *format, if (dict && (argidx < arglen) && c != '%') { PyErr_SetString(PyExc_TypeError, "not all arguments converted during string formatting"); + Py_XDECREF(temp); goto onError; } Py_XDECREF(temp); @@ -7237,12 +7240,12 @@ PyObject *PyUnicode_Format(PyObject *format, goto onError; } + if (_PyUnicode_Resize(&result, reslen - rescnt) < 0) + goto onError; if (args_owned) { Py_DECREF(args); } Py_DECREF(uformat); - if (_PyUnicode_Resize(&result, reslen - rescnt) < 0) - goto onError; return (PyObject *)result; onError: |