]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #18408: _PyUnicodeWriter_Finish() now clears its buffer attribute in all
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 8 Jul 2013 22:37:24 +0000 (00:37 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 8 Jul 2013 22:37:24 +0000 (00:37 +0200)
cases, so _PyUnicodeWriter_Dealloc() can be called after finish.

Objects/unicodeobject.c

index 96c7c5825e01a3129dab7c4aac488df72e4c6168..1a448824f7ab02d24fdf3120f7ba0244816b47f3 100644 (file)
@@ -13159,18 +13159,21 @@ _PyUnicodeWriter_Finish(_PyUnicodeWriter *writer)
 {
     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;