diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2018-12-11 10:51:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-11 10:51:27 +0200 |
commit | 3cae16d2e98ffaa89ddd311df70a857dfaff4020 (patch) | |
tree | 3670fd9018afba95a6498779d3bc48f376ac720e /Objects | |
parent | 62674f3a36ec55f86a5f20ee028a37fbd549bd6c (diff) | |
download | cpython-git-3cae16d2e98ffaa89ddd311df70a857dfaff4020.tar.gz |
bpo-35444: Fix error handling when fail to look up builtin "getattr". (GH-11047) (GH-11107)
(cherry picked from commit bb86bf4c4eaa30b1f5192dab9f389ce0bb61114d)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/classobject.c | 7 | ||||
-rw-r--r-- | Objects/descrobject.c | 17 | ||||
-rw-r--r-- | Objects/methodobject.c | 7 |
3 files changed, 8 insertions, 23 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c index 3dc23b796c..f45d6ae809 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -77,8 +77,6 @@ method_reduce(PyMethodObject *im) { PyObject *self = PyMethod_GET_SELF(im); PyObject *func = PyMethod_GET_FUNCTION(im); - PyObject *builtins; - PyObject *getattr; PyObject *funcname; _Py_IDENTIFIER(getattr); @@ -86,9 +84,8 @@ method_reduce(PyMethodObject *im) if (funcname == NULL) { return NULL; } - builtins = PyEval_GetBuiltins(); - getattr = _PyDict_GetItemId(builtins, &PyId_getattr); - return Py_BuildValue("O(ON)", getattr, self, funcname); + return Py_BuildValue("N(ON)", _PyEval_GetBuiltinId(&PyId_getattr), + self, funcname); } static PyMethodDef method_methods[] = { diff --git a/Objects/descrobject.c b/Objects/descrobject.c index f19d07aa25..277fed9956 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -450,14 +450,9 @@ descr_get_qualname(PyDescrObject *descr, void *Py_UNUSED(ignored)) static PyObject * descr_reduce(PyDescrObject *descr) { - PyObject *builtins; - PyObject *getattr; _Py_IDENTIFIER(getattr); - - builtins = PyEval_GetBuiltins(); - getattr = _PyDict_GetItemId(builtins, &PyId_getattr); - return Py_BuildValue("O(OO)", getattr, PyDescr_TYPE(descr), - PyDescr_NAME(descr)); + return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr), + PyDescr_TYPE(descr), PyDescr_NAME(descr)); } static PyMethodDef descr_methods[] = { @@ -1088,13 +1083,9 @@ wrapper_repr(wrapperobject *wp) static PyObject * wrapper_reduce(wrapperobject *wp) { - PyObject *builtins; - PyObject *getattr; _Py_IDENTIFIER(getattr); - - builtins = PyEval_GetBuiltins(); - getattr = _PyDict_GetItemId(builtins, &PyId_getattr); - return Py_BuildValue("O(OO)", getattr, wp->self, PyDescr_NAME(wp->descr)); + return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr), + wp->self, PyDescr_NAME(wp->descr)); } static PyMethodDef wrapper_methods[] = { diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 2cf314660d..f9bac1922d 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -103,16 +103,13 @@ meth_dealloc(PyCFunctionObject *m) static PyObject * meth_reduce(PyCFunctionObject *m) { - PyObject *builtins; - PyObject *getattr; _Py_IDENTIFIER(getattr); if (m->m_self == NULL || PyModule_Check(m->m_self)) return PyUnicode_FromString(m->m_ml->ml_name); - builtins = PyEval_GetBuiltins(); - getattr = _PyDict_GetItemId(builtins, &PyId_getattr); - return Py_BuildValue("O(Os)", getattr, m->m_self, m->m_ml->ml_name); + return Py_BuildValue("N(Os)", _PyEval_GetBuiltinId(&PyId_getattr), + m->m_self, m->m_ml->ml_name); } static PyMethodDef meth_methods[] = { |