mirror of https://github.com/python/cpython
Issue #18520: Fix PyFunction_NewWithQualName() error handling
This commit is contained in:
parent
4d1f5d6eee
commit
34f96b8dd3
|
@ -12,6 +12,12 @@ PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname
|
|||
PyObject *doc, *consts, *module;
|
||||
static PyObject *__name__ = NULL;
|
||||
|
||||
if (__name__ == NULL) {
|
||||
__name__ = PyUnicode_InternFromString("__name__");
|
||||
if (__name__ == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
|
||||
if (op == NULL)
|
||||
return NULL;
|
||||
|
@ -26,6 +32,7 @@ PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname
|
|||
op->func_defaults = NULL; /* No default arguments */
|
||||
op->func_kwdefaults = NULL; /* No keyword only defaults */
|
||||
op->func_closure = NULL;
|
||||
|
||||
consts = ((PyCodeObject *)code)->co_consts;
|
||||
if (PyTuple_Size(consts) >= 1) {
|
||||
doc = PyTuple_GetItem(consts, 0);
|
||||
|
@ -36,21 +43,13 @@ PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname
|
|||
doc = Py_None;
|
||||
Py_INCREF(doc);
|
||||
op->func_doc = doc;
|
||||
|
||||
op->func_dict = NULL;
|
||||
op->func_module = NULL;
|
||||
op->func_annotations = NULL;
|
||||
|
||||
/* __module__: If module name is in globals, use it.
|
||||
Otherwise, use None.
|
||||
*/
|
||||
if (!__name__) {
|
||||
__name__ = PyUnicode_InternFromString("__name__");
|
||||
if (!__name__) {
|
||||
Py_DECREF(op);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
Otherwise, use None. */
|
||||
module = PyDict_GetItem(globals, __name__);
|
||||
if (module) {
|
||||
Py_INCREF(module);
|
||||
|
|
Loading…
Reference in New Issue