]> granicus.if.org Git - python/commitdiff
Issue #23571: Enhance _Py_CheckFunctionResult()
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Mar 2015 15:28:52 +0000 (16:28 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 24 Mar 2015 15:28:52 +0000 (16:28 +0100)
Too bad, sometimes Py_FatalError() is unable to write the exception into
sys.stderr (on "AMD64 OpenIndiana 3.x" buildbot, the buildbot was probably out
of memory).

Call Py_FatalError() with a different message for the two cases (result+error,
or no result and no error).

Lib/test/test_capi.py
Objects/abstract.c

index 8a92d6ba29ec941d6c0aecdb789aced3a9208f84..fbd1466c7885373678f34e194914380c76614e52 100644 (file)
@@ -185,8 +185,8 @@ class CAPITest(unittest.TestCase):
             """)
             rc, out, err = assert_python_failure('-c', code)
             self.assertRegex(err.replace(b'\r', b''),
-                             br'Fatal Python error: '
-                                br'Function result is invalid\n'
+                             br'Fatal Python error: a function returned NULL '
+                                br'without setting an error\n'
                              br'SystemError: <built-in function '
                                  br'return_null_without_error> returned NULL '
                                  br'without setting an error\n'
@@ -212,8 +212,8 @@ class CAPITest(unittest.TestCase):
             """)
             rc, out, err = assert_python_failure('-c', code)
             self.assertRegex(err.replace(b'\r', b''),
-                             br'Fatal Python error: '
-                                br'Function result is invalid\n'
+                             br'Fatal Python error: a function returned a '
+                                br'result with an error set\n'
                              br'ValueError\n'
                              br'\n'
                              br'During handling of the above exception, '
index 6f8432efefd2064bc2502fd19f13c2b8232ff689..dc8fb3749d3ce33984501926d372563af52f6251 100644 (file)
@@ -2090,7 +2090,11 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where)
                 PyErr_Format(PyExc_SystemError,
                              "%s returned NULL without setting an error",
                              where);
-            goto error;
+#ifdef Py_DEBUG
+            /* Ensure that the bug is catched in debug mode */
+            Py_FatalError("a function returned NULL without setting an error");
+#endif
+            return NULL;
         }
     }
     else {
@@ -2109,17 +2113,14 @@ _Py_CheckFunctionResult(PyObject *func, PyObject *result, const char *where)
                              "%s returned a result with an error set",
                              where);
             _PyErr_ChainExceptions(exc, val, tb);
-            goto error;
+#ifdef Py_DEBUG
+            /* Ensure that the bug is catched in debug mode */
+            Py_FatalError("a function returned a result with an error set");
+#endif
+            return NULL;
         }
     }
     return result;
-
-error:
-#ifdef Py_DEBUG
-    /* Ensure that the bug is catched in debug mode */
-    Py_FatalError("Function result is invalid");
-#endif
-    return NULL;
 }
 
 PyObject *