]> granicus.if.org Git - python/commitdiff
Issue #18520: Fix PyFunction_NewWithQualName() error handling
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 22 Jul 2013 21:04:55 +0000 (23:04 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 22 Jul 2013 21:04:55 +0000 (23:04 +0200)
Objects/funcobject.c

index b5525e3d4460b96a402376f4620e5fe7db264a07..b04393415a79d7e4cf71ef83ddadfb25564ae1e4 100644 (file)
@@ -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);