https://github.com/python/cpython/commit/9172bc35c669b7706d7122d4f0a90f065700a474 commit: 9172bc35c669b7706d7122d4f0a90f065700a474 branch: 3.13 author: Miss Islington (bot) <[email protected]> committer: kumaraditya303 <[email protected]> date: 2024-06-17T22:30:26+05:30 summary:
[3.13] gh-115649: Copy the filename into main interpreter before intern in import.c (GH-120315) (#120652) gh-115649: Copy the filename into main interpreter before intern in import.c (GH-120315) (cherry picked from commit 28140d1f2da1766bfbb83f58779f15255c73c871) Co-authored-by: AN Long <[email protected]> Co-authored-by: Kumar Aditya <[email protected]> files: M Lib/test/test_import/__init__.py M Python/import.c diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index b09065f812c0e4..f9e8558d1a71c8 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -2157,6 +2157,8 @@ def test_single_init_extension_compat(self): self.check_incompatible_here(module) with self.subTest(f'{module}: strict, fresh'): self.check_incompatible_fresh(module) + with self.subTest(f'{module}: isolated, fresh'): + self.check_incompatible_fresh(module, isolated=True) @unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module") def test_multi_init_extension_compat(self): diff --git a/Python/import.c b/Python/import.c index 10ac49fd95fc59..8cf97b51f65fec 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1969,7 +1969,17 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0, if (info->filename != NULL) { // XXX There's a refleak somewhere with the filename. // Until we can track it down, we intern it. - PyObject *filename = Py_NewRef(info->filename); + PyObject *filename = NULL; + if (switched) { + // The original filename may be allocated by subinterpreter's + // obmalloc, so we create a copy here. + filename = _PyUnicode_Copy(info->filename); + if (filename == NULL) { + return NULL; + } + } else { + filename = Py_NewRef(info->filename); + } PyUnicode_InternInPlace(&filename); if (PyModule_AddObjectRef(mod, "__file__", filename) < 0) { PyErr_Clear(); /* Not important enough to report */ _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: [email protected]
