Commit cc4b6f1c authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-31719: Fix test_regrtest.test_crashed() on s390x (#3912)

Add a new _testcapi._read_null() function to crash Python in a
reliable way on s390x.

On s390x, ctypes.string_at(0) returns an empty string rather than
crashing.
parent 7440655b
......@@ -1960,6 +1960,6 @@ def _crash_python():
Use SuppressCrashReport() to prevent a crash report from popping up.
"""
import ctypes
import _testcapi
with SuppressCrashReport():
ctypes.string_at(0)
_testcapi._read_null()
......@@ -543,6 +543,8 @@ class ArgsTestCase(BaseTestCase):
testname)
self.assertEqual(output.splitlines(), all_methods)
@unittest.skipIf(sys.platform.startswith('aix'),
"support._crash_python() doesn't work on AIX")
def test_crashed(self):
# Any code which causes a crash
code = 'import test.support; test.support._crash_python()'
......
Fix test_regrtest.test_crashed() on s390x. Add a new _testcapi._read_null()
function to crash Python in a reliable way on s390x. On s390x,
ctypes.string_at(0) returns an empty string rather than crashing.
......@@ -2566,6 +2566,22 @@ py_w_stopcode(PyObject *self, PyObject *args)
#endif
/* Read memory from NULL (address 0) to raise a SIGSEGV or SIGBUS signal
depending on the platform. This function is used by
test.support._crash_python() to "crash" Python. */
static PyObject *
read_null(PyObject *self, PyObject *args)
{
volatile int *x;
volatile int y;
x = NULL;
y = *x;
return PyLong_FromLong(y);
}
static PyMethodDef TestMethods[] = {
{"raise_exception", raise_exception, METH_VARARGS},
{"set_errno", set_errno, METH_VARARGS},
......@@ -2685,6 +2701,7 @@ static PyMethodDef TestMethods[] = {
#ifdef W_STOPCODE
{"W_STOPCODE", py_w_stopcode, METH_VARARGS},
#endif
{"_read_null", (PyCFunction)read_null, METH_NOARGS},
{NULL, NULL} /* sentinel */
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment