summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-03-17 17:09:46 (GMT)
committerGitHub <noreply@github.com>2020-03-17 17:09:46 (GMT)
commit5b1ef200d31a74a9b478d0217d73ed0a659a8a06 (patch)
tree3a3afde33a456ac49284058c00b1d685c54bcf3c /Lib
parent52268941f37e3e27bd01792b081877ec3bc9ce12 (diff)
downloadcpython-5b1ef200d31a74a9b478d0217d73ed0a659a8a06.zip
cpython-5b1ef200d31a74a9b478d0217d73ed0a659a8a06.tar.gz
cpython-5b1ef200d31a74a9b478d0217d73ed0a659a8a06.tar.bz2
bpo-39824: module_traverse() don't call m_traverse if md_state=NULL (GH-18738)
Extension modules: m_traverse, m_clear and m_free functions of PyModuleDef are no longer called if the module state was requested but is not allocated yet. This is the case immediately after the module is created and before the module is executed (Py_mod_exec function). More precisely, these functions are not called if m_size is greater than 0 and the module state (as returned by PyModule_GetState()) is NULL. Extension modules without module state (m_size <= 0) are not affected. Co-Authored-By: Petr Viktorin <encukou@gmail.com>
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_importlib/extension/test_loader.py23
1 files changed, 0 insertions, 23 deletions
diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py
index 9ad05fa..abd612f 100644
--- a/Lib/test/test_importlib/extension/test_loader.py
+++ b/Lib/test/test_importlib/extension/test_loader.py
@@ -267,29 +267,6 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests):
self.assertEqual(module.__name__, name)
self.assertEqual(module.__doc__, "Module named in %s" % lang)
- @unittest.skipIf(not hasattr(sys, 'gettotalrefcount'),
- '--with-pydebug has to be enabled for this test')
- def test_bad_traverse(self):
- ''' Issue #32374: Test that traverse fails when accessing per-module
- state before Py_mod_exec was executed.
- (Multiphase initialization modules only)
- '''
- script = """if True:
- try:
- from test import support
- import importlib.util as util
- spec = util.find_spec('_testmultiphase')
- spec.name = '_testmultiphase_with_bad_traverse'
-
- with support.SuppressCrashReport():
- m = spec.loader.create_module(spec)
- except:
- # Prevent Python-level exceptions from
- # ending the process with non-zero status
- # (We are testing for a crash in C-code)
- pass"""
- assert_python_failure("-c", script)
-
(Frozen_MultiPhaseExtensionModuleTests,
Source_MultiPhaseExtensionModuleTests