From: Pablo Galindo Salgado Date: Sun, 15 Feb 2026 18:36:47 +0000 (+0000) Subject: gh-144727: Add test for circular lazy import crash (#144727) (#144838) X-Git-Tag: v3.15.0a7~274 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5fe139cc39fb8110b3d6cbed6224d7c8f5d91987;p=thirdparty%2FPython%2Fcpython.git gh-144727: Add test for circular lazy import crash (#144727) (#144838) Add a regression test ensuring that circular lazy imports raise a proper error (ImportCycleError) instead of crashing with a segfault. The crash was fixed in gh-144733 but no test was added at the time. --- diff --git a/Lib/test/test_import/test_lazy_imports.py b/Lib/test/test_import/test_lazy_imports.py index 1193af958903..a4c9c14ae2b5 100644 --- a/Lib/test/test_import/test_lazy_imports.py +++ b/Lib/test/test_import/test_lazy_imports.py @@ -8,6 +8,8 @@ import textwrap import threading import types import unittest +import tempfile +import os try: import _testcapi @@ -598,6 +600,39 @@ class ErrorHandlingTests(unittest.TestCase): self.assertEqual(result.returncode, 0, f"stdout: {result.stdout}, stderr: {result.stderr}") self.assertIn("OK", result.stdout) + def test_circular_lazy_import_does_not_crash_for_gh_144727(self): + with tempfile.TemporaryDirectory() as tmpdir: + a_path = os.path.join(tmpdir, "a.py") + b_path = os.path.join(tmpdir, "b.py") + + with open(a_path, "w") as f: + f.write(textwrap.dedent("""\ + lazy import b + + def something(): + b.hello() + + something() + """)) + + with open(b_path, "w") as f: + f.write(textwrap.dedent("""\ + lazy import a + + def hello(): + print(a) + """)) + + result = subprocess.run( + [sys.executable, a_path], + capture_output=True, + text=True, + cwd=tmpdir, + ) + # Should get a proper Python error, not a crash + self.assertEqual(result.returncode, 1) + self.assertIn("Error", result.stderr) + class GlobalsAndDictTests(unittest.TestCase): """Tests for globals() and __dict__ behavior with lazy imports.