summaryrefslogtreecommitdiffstats
path: root/Objects/longobject.c
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2016-12-03 19:01:50 (GMT)
committerBenjamin Peterson <benjamin@python.org>2016-12-03 19:01:50 (GMT)
commit445844993b68f102241a600636b0d69394db1c7b (patch)
treed94d4fc9c7017fca0ff68a9d1889ccaff5e0801d /Objects/longobject.c
parent32b37348661b73b1dd6e061ef56679039222f31b (diff)
downloadcpython-445844993b68f102241a600636b0d69394db1c7b.zip
cpython-445844993b68f102241a600636b0d69394db1c7b.tar.gz
cpython-445844993b68f102241a600636b0d69394db1c7b.tar.bz2
fix refleak in the shift-by-zero case (#27870)
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r--Objects/longobject.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c
index b87546e..768a92a 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3710,14 +3710,15 @@ long_lshift(PyObject *v, PyObject *w)
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 @@ long_lshift(PyObject *v, PyObject *w)
++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 @@ long_lshift(PyObject *v, PyObject *w)
else
assert(!accum);
z = long_normalize(z);
- lshift_error:
+ out:
Py_DECREF(a);
Py_DECREF(b);
return (PyObject *) z;