From 15f0adaa7b3e5b8d616ac72fa3efb7e3f6aed565 Mon Sep 17 00:00:00 2001 From: devdanzin <74280297+devdanzin@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:59:18 -0300 Subject: [PATCH 1/3] Fix the interpreter exiting on Windows if a too long filename ends up in linecache.updatecache(). --- Lib/linecache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/linecache.py b/Lib/linecache.py index 3462f1c451ba29..b737aaf449faa5 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -98,7 +98,7 @@ def updatecache(filename, module_globals=None): fullname = filename try: stat = os.stat(fullname) - except OSError: + except (OSError, ValueError): basename = filename # Realise a lazy loader based lookup if there is one From 698ba3c275e5ac024a4e1aac1d0157afd48ab378 Mon Sep 17 00:00:00 2001 From: devdanzin <74280297+devdanzin@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:18:19 -0300 Subject: [PATCH 2/3] Fix another os.stat error in Windows if a too long filename in linecache.updatecache(), add test. --- Lib/linecache.py | 2 +- Lib/test/test_linecache.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Lib/linecache.py b/Lib/linecache.py index b737aaf449faa5..f8eed1260516b1 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -135,7 +135,7 @@ def updatecache(filename, module_globals=None): try: stat = os.stat(fullname) break - except OSError: + except (OSError, ValueError): pass else: return [] diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 8ac521d72ef13e..8c50fdf532ba67 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -280,6 +280,9 @@ def test_loader(self): self.assertEqual(linecache.getlines(filename, module_globals), ['source for x.y.z\n']) + def test_filename_too_long(self): + self.assertEqual(linecache.updatecache("s" * 999999), []) + class LineCacheInvalidationTests(unittest.TestCase): def setUp(self): From 16237e4d4d4af35301c321123528816e866eed5a Mon Sep 17 00:00:00 2001 From: devdanzin <74280297+devdanzin@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:23:43 -0300 Subject: [PATCH 3/3] Skip LineCacheTests.test_filename_too_long if not on Windows. --- Lib/test/test_linecache.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 8c50fdf532ba67..e8b3bd9602812f 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -280,6 +280,7 @@ def test_loader(self): self.assertEqual(linecache.getlines(filename, module_globals), ['source for x.y.z\n']) + @unittest.skipUnless(support.MS_WINDOWS, "Test only relevant in Windows.") def test_filename_too_long(self): self.assertEqual(linecache.updatecache("s" * 999999), [])