]> granicus.if.org Git - python/commitdiff
bpo-34720: Fix test_importlib.test_bad_traverse for AIX (GH-9391)
authorMichael Felt <aixtools@users.noreply.github.com>
Sun, 17 Feb 2019 12:02:56 +0000 (13:02 +0100)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 17 Feb 2019 12:02:56 +0000 (04:02 -0800)
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

Misc/NEWS.d/next/Tests/2018-12-26-12-31-16.bpo-34720.T268vz.rst [new file with mode: 0644]
Modules/_testmultiphase.c

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 (file)
index 0000000..fc49028
--- /dev/null
@@ -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.
index 5776df7d765db96dd6bb338e6fe096b562a813f1..c6dfc2f01dc069bfe032599ca32a550cb983b27d 100644 (file)
@@ -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;
 }