mirror of
https://github.com/python/cpython.git
synced 2025-11-02 19:12:55 +00:00
SF bug #980419: int left-shift causes memory leak
This commit is contained in:
parent
555a96475d
commit
a006c37472
1 changed files with 26 additions and 4 deletions
|
|
@ -751,6 +751,8 @@ static PyObject *
|
||||||
int_lshift(PyIntObject *v, PyIntObject *w)
|
int_lshift(PyIntObject *v, PyIntObject *w)
|
||||||
{
|
{
|
||||||
long a, b, c;
|
long a, b, c;
|
||||||
|
PyObject *vv, *ww, *result;
|
||||||
|
|
||||||
CONVERT_TO_LONG(v, a);
|
CONVERT_TO_LONG(v, a);
|
||||||
CONVERT_TO_LONG(w, b);
|
CONVERT_TO_LONG(w, b);
|
||||||
if (b < 0) {
|
if (b < 0) {
|
||||||
|
|
@ -760,13 +762,33 @@ int_lshift(PyIntObject *v, PyIntObject *w)
|
||||||
if (a == 0 || b == 0)
|
if (a == 0 || b == 0)
|
||||||
return int_pos(v);
|
return int_pos(v);
|
||||||
if (b >= LONG_BIT) {
|
if (b >= LONG_BIT) {
|
||||||
return PyNumber_Lshift(PyLong_FromLong(PyInt_AS_LONG(v)),
|
vv = PyLong_FromLong(PyInt_AS_LONG(v));
|
||||||
PyLong_FromLong(PyInt_AS_LONG(w)));
|
if (vv == NULL)
|
||||||
|
return NULL;
|
||||||
|
ww = PyLong_FromLong(PyInt_AS_LONG(w));
|
||||||
|
if (ww == NULL) {
|
||||||
|
Py_DECREF(vv);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
result = PyNumber_Lshift(vv, ww);
|
||||||
|
Py_DECREF(vv);
|
||||||
|
Py_DECREF(ww);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
c = a << b;
|
c = a << b;
|
||||||
if (a != Py_ARITHMETIC_RIGHT_SHIFT(long, c, b)) {
|
if (a != Py_ARITHMETIC_RIGHT_SHIFT(long, c, b)) {
|
||||||
return PyNumber_Lshift(PyLong_FromLong(PyInt_AS_LONG(v)),
|
vv = PyLong_FromLong(PyInt_AS_LONG(v));
|
||||||
PyLong_FromLong(PyInt_AS_LONG(w)));
|
if (vv == NULL)
|
||||||
|
return NULL;
|
||||||
|
ww = PyLong_FromLong(PyInt_AS_LONG(w));
|
||||||
|
if (ww == NULL) {
|
||||||
|
Py_DECREF(vv);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
result = PyNumber_Lshift(vv, ww);
|
||||||
|
Py_DECREF(vv);
|
||||||
|
Py_DECREF(ww);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong(c);
|
return PyInt_FromLong(c);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue