Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bf35c15

Browse files
committed
Fix refleak: PyObject_GetItem returns a new reference, not a borrowed one like PyDict_GetItem.
1 parent aa2efcb commit bf35c15

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

Python/ceval.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,6 +1940,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
19401940
"__build_class__ not found");
19411941
break;
19421942
}
1943+
Py_INCREF(x);
19431944
}
19441945
else {
19451946
PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__);
@@ -1953,7 +1954,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
19531954
break;
19541955
}
19551956
}
1956-
Py_INCREF(x);
19571957
PUSH(x);
19581958
break;
19591959
}
@@ -2092,6 +2092,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
20922092
}
20932093
if (x == NULL) {
20942094
x = PyDict_GetItem(f->f_globals, w);
2095+
Py_XINCREF(x);
20952096
if (x == NULL) {
20962097
if (PyDict_CheckExact(f->f_builtins)) {
20972098
x = PyDict_GetItem(f->f_builtins, w);
@@ -2101,6 +2102,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
21012102
NAME_ERROR_MSG, w);
21022103
break;
21032104
}
2105+
Py_INCREF(x);
21042106
}
21052107
else {
21062108
x = PyObject_GetItem(f->f_builtins, w);
@@ -2113,7 +2115,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
21132115
}
21142116
}
21152117
}
2116-
Py_INCREF(x);
21172118
}
21182119
PUSH(x);
21192120
DISPATCH();
@@ -2186,7 +2187,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
21862187
break;
21872188
}
21882189
}
2189-
Py_INCREF(x);
21902190
PUSH(x);
21912191
DISPATCH();
21922192

0 commit comments

Comments
 (0)