Issue #23571: Enhance _Py_CheckFunctionResult()
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).
This commit is contained in:
parent
381a9bce97
commit
944fbcc478
|
@ -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, '
|
||||
|
|
|
@ -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 *
|
||||
|
|
Loading…
Reference in New Issue