From 1bf8845f74013c5f1cc5f49a11e52c652a1fb9dd Mon Sep 17 00:00:00 2001 From: Michael Felt Date: Sun, 17 Feb 2019 13:02:56 +0100 Subject: [PATCH] bpo-34720: Fix test_importlib.test_bad_traverse for AIX (GH-9391) Fix Modules/_testmultiphase.c so that it exits with non-zero status on AIX just as other systems do (non zero exit status, e.g. as result of a segmentation fault) when a NULL pointer is accessed for data. https://bugs.python.org/issue34720 --- .../next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst | 2 ++ Modules/_testmultiphase.c | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 Misc/NEWS.d/next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst diff --git a/Misc/NEWS.d/next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst b/Misc/NEWS.d/next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst new file mode 100644 index 00000000000..fc490285db3 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst @@ -0,0 +1,2 @@ +Assert m_state != NULL to mimic GC traversal functions that do not correctly +handle module creation when the module state has not been created. diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c index 5776df7d765..c6dfc2f01dc 100644 --- a/Modules/_testmultiphase.c +++ b/Modules/_testmultiphase.c @@ -624,6 +624,14 @@ bad_traverse(PyObject *self, visitproc visit, void *arg) { testmultiphase_state *m_state; m_state = PyModule_GetState(self); + + /* The following assertion mimics any traversal function that doesn't correctly handle + * the case during module creation where the module state hasn't been created yet. + * + * The check that it is used to test only runs in debug mode, so it is OK that the + * assert() will get compiled out in fully optimised release builds. + */ + assert(m_state != NULL); Py_VISIT(m_state->integer); return 0; }