[Python-checkins] cpython: Issue #18408: _PyUnicodeWriter_Finish() now clears its buffer attribute in all

victor.stinner python-checkins at python.org
Tue Jul 9 00:53:53 CEST 2013


http://hg.python.org/cpython/rev/d605c6b8095c
changeset:   84521:d605c6b8095c
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Tue Jul 09 00:37:24 2013 +0200
summary:
  Issue #18408: _PyUnicodeWriter_Finish() now clears its buffer attribute in all
cases, so _PyUnicodeWriter_Dealloc() can be called after finish.

files:
  Objects/unicodeobject.c |  9 ++++++---
  1 files changed, 6 insertions(+), 3 deletions(-)


diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -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;

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list