summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_import/__init__.py8
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-06-22-19-16-24.gh-issue-105979.TDP2CU.rst1
-rw-r--r--Python/import.c1
3 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py
index f2726da..e0e2354 100644
--- a/Lib/test/test_import/__init__.py
+++ b/Lib/test/test_import/__init__.py
@@ -23,6 +23,7 @@ import types
import unittest
from unittest import mock
import _testinternalcapi
+import _imp
from test.support import os_helper
from test.support import (
@@ -763,6 +764,13 @@ class ImportTests(unittest.TestCase):
env=env,
cwd=os.path.dirname(pyexe))
+ def test_issue105979(self):
+ # this used to crash
+ with self.assertRaises(ImportError) as cm:
+ _imp.get_frozen_object("x", b"6\'\xd5Cu\x12")
+ self.assertIn("Frozen object named 'x' is invalid",
+ str(cm.exception))
+
@skip_if_dont_write_bytecode
class FilePermissionTests(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-22-19-16-24.gh-issue-105979.TDP2CU.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-22-19-16-24.gh-issue-105979.TDP2CU.rst
new file mode 100644
index 0000000..be6962a
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-06-22-19-16-24.gh-issue-105979.TDP2CU.rst
@@ -0,0 +1 @@
+Fix crash in :func:`!_imp.get_frozen_object` due to improper exception handling.
diff --git a/Python/import.c b/Python/import.c
index 969902a..9b1ad87 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2071,6 +2071,7 @@ unmarshal_frozen_code(PyInterpreterState *interp, struct frozen_info *info)
PyObject *co = PyMarshal_ReadObjectFromString(info->data, info->size);
if (co == NULL) {
/* Does not contain executable code. */
+ PyErr_Clear();
set_frozen_error(FROZEN_INVALID, info->nameobj);
return NULL;
}