]> granicus.if.org Git - python/commitdiff
unpack_iterable(): Add a missing DECREF in an error case. Reported by
authorGuido van Rossum <guido@python.org>
Mon, 3 Dec 2001 19:33:25 +0000 (19:33 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 3 Dec 2001 19:33:25 +0000 (19:33 +0000)
Armin Rigo (SF bug #488477).  Added a testcase to test_unpack_iter()
in test_iter.py.

Lib/test/test_iter.py
Python/ceval.c

index 5bd7ba44a5bec54f1dbd85300b5b56eaf1c23aed..13ed5bd4a8b549bb4e0564cb156434caa983a18b 100644 (file)
@@ -747,6 +747,29 @@ class TestCase(unittest.TestCase):
         (a, b), (c,) = IteratingSequenceClass(2), {42: 24}
         self.assertEqual((a, b, c), (0, 1, 42))
 
+        # Test reference count behavior
+
+        class C(object):
+            count = 0
+            def __new__(cls):
+                cls.count += 1
+                return object.__new__(cls)
+            def __del__(self):
+                cls = self.__class__
+                assert cls.count > 0
+                cls.count -= 1
+        x = C()
+        self.assertEqual(C.count, 1)
+        del x
+        self.assertEqual(C.count, 0)
+        l = [C(), C(), C()]
+        self.assertEqual(C.count, 3)
+        try:
+            a, b = iter(l)
+        except ValueError:
+            pass
+        del l
+        self.assertEqual(C.count, 0)
 
 def test_main():
     run_unittest(TestCase)
index fd602b0a321a8f88ca32e3047b71a4a9e076064e..b41ef5a71e56f0aba7583dada534f53b47e6d438 100644 (file)
@@ -2796,6 +2796,7 @@ unpack_iterable(PyObject *v, int argcnt, PyObject **sp)
                Py_DECREF(it);
                return 1;
        }
+       Py_DECREF(w);
        PyErr_SetString(PyExc_ValueError, "too many values to unpack");
        /* fall through */
 Error: