[Python-checkins] cpython (2.7): fix refleak in the shift-by-zero case (#27870)

benjamin.peterson python-checkins at python.org
Sat Dec 3 14:04:00 EST 2016


https://hg.python.org/cpython/rev/2b190bfd9ab4
changeset:   105426:2b190bfd9ab4
branch:      2.7
user:        Benjamin Peterson <benjamin at python.org>
date:        Sat Dec 03 11:01:50 2016 -0800
summary:
  fix refleak in the shift-by-zero case (#27870)

files:
  Objects/longobject.c |  11 ++++++-----
  1 files changed, 6 insertions(+), 5 deletions(-)


diff --git a/Objects/longobject.c b/Objects/longobject.c
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3710,14 +3710,15 @@
 
     shiftby = PyLong_AsSsize_t((PyObject *)b);
     if (shiftby == -1L && PyErr_Occurred())
-        goto lshift_error;
+        goto out;
     if (shiftby < 0) {
         PyErr_SetString(PyExc_ValueError, "negative shift count");
-        goto lshift_error;
+        goto out;
     }
 
     if (Py_SIZE(a) == 0) {
-        return PyLong_FromLong(0);
+        z = (PyLongObject *)PyLong_FromLong(0);
+        goto out;
     }
 
     /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
@@ -3730,7 +3731,7 @@
         ++newsize;
     z = _PyLong_New(newsize);
     if (z == NULL)
-        goto lshift_error;
+        goto out;
     if (a->ob_size < 0)
         z->ob_size = -(z->ob_size);
     for (i = 0; i < wordshift; i++)
@@ -3746,7 +3747,7 @@
     else
         assert(!accum);
     z = long_normalize(z);
-  lshift_error:
+  out:
     Py_DECREF(a);
     Py_DECREF(b);
     return (PyObject *) z;

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


More information about the Python-checkins mailing list