[Python-checkins] cpython (merge 3.2 -> default): Merge 3.2

petri.lehtinen python-checkins at python.org
Mon Oct 24 20:33:30 CEST 2011


http://hg.python.org/cpython/rev/db85b1cdcae2
changeset:   73104:db85b1cdcae2
parent:      73072:479a7dd1ea6a
parent:      73103:df24a8b57148
user:        Petri Lehtinen <petri at digip.org>
date:        Mon Oct 24 21:17:52 2011 +0300
summary:
  Merge 3.2

files:
  Misc/NEWS            |   3 +++
  Objects/dictobject.c |  16 ++++++++++++----
  2 files changed, 15 insertions(+), 4 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 Core and Builtins
 -----------------
 
+- Issue #13018: Fix reference leaks in error paths in dictobject.c.
+  Patch by Suman Saha.
+
 - Issue #13201: Define '==' and '!=' to compare range objects based on
   the sequence of values they define (instead of comparing based on
   object identity).
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1314,14 +1314,18 @@
         PyObject *key;
         Py_hash_t hash;
 
-        if (dictresize(mp, Py_SIZE(seq)))
+        if (dictresize(mp, Py_SIZE(seq))) {
+            Py_DECREF(d);
             return NULL;
+        }
 
         while (_PyDict_Next(seq, &pos, &key, &oldvalue, &hash)) {
             Py_INCREF(key);
             Py_INCREF(value);
-            if (insertdict(mp, key, hash, value))
+            if (insertdict(mp, key, hash, value)) {
+                Py_DECREF(d);
                 return NULL;
+            }
         }
         return d;
     }
@@ -1332,14 +1336,18 @@
         PyObject *key;
         Py_hash_t hash;
 
-        if (dictresize(mp, PySet_GET_SIZE(seq)))
+        if (dictresize(mp, PySet_GET_SIZE(seq))) {
+            Py_DECREF(d);
             return NULL;
+        }
 
         while (_PySet_NextEntry(seq, &pos, &key, &hash)) {
             Py_INCREF(key);
             Py_INCREF(value);
-            if (insertdict(mp, key, hash, value))
+            if (insertdict(mp, key, hash, value)) {
+                Py_DECREF(d);
                 return NULL;
+            }
         }
         return d;
     }

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


More information about the Python-checkins mailing list