(original) (raw)
changeset: 84521:d605c6b8095c user: Victor Stinner victor.stinner@gmail.com date: Tue Jul 09 00:37:24 2013 +0200 files: Objects/unicodeobject.c description: Issue #18408: _PyUnicodeWriter_Finish() now clears its buffer attribute in all cases, so _PyUnicodeWriter_Dealloc() can be called after finish. diff -r ed0c9d77e179 -r d605c6b8095c Objects/unicodeobject.c --- a/Objects/unicodeobject.c Tue Jul 09 00:35:22 2013 +0200 +++ b/Objects/unicodeobject.c Tue Jul 09 00:37:24 2013 +0200 @@ -13159,18 +13159,21 @@ { PyObject *str; if (writer->pos == 0) { - Py_XDECREF(writer->buffer); + Py_CLEAR(writer->buffer); _Py_RETURN_UNICODE_EMPTY(); } if (writer->readonly) { - assert(PyUnicode_GET_LENGTH(writer->buffer) == writer->pos); - return writer->buffer; + str = writer->buffer; + writer->buffer = NULL; + assert(PyUnicode_GET_LENGTH(str) == writer->pos); + return str; } if (PyUnicode_GET_LENGTH(writer->buffer) != writer->pos) { PyObject *newbuffer; newbuffer = resize_compact(writer->buffer, writer->pos); if (newbuffer == NULL) { Py_DECREF(writer->buffer); + writer->buffer = NULL; return NULL; } writer->buffer = newbuffer; /victor.stinner@gmail.com