From 9974e1bcf3d0cec9b38b39b39b7ec8a1ebd9ef54 Mon Sep 17 00:00:00 2001 From: Oren Milman Date: Tue, 19 Sep 2017 14:39:47 +0300 Subject: bpo-31315: Fix an assertion failure in imp.create_dynamic(), when spec.name is not a string. (#3257) --- Lib/test/test_imp.py | 11 +++++++++++ .../2017-09-01-00-40-58.bpo-31315.ZX20bl.rst | 2 ++ Python/importdl.c | 5 +++++ 3 files changed, 18 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2017-09-01-00-40-58.bpo-31315.ZX20bl.rst diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index 3bfcb09..51bec50 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -313,6 +313,17 @@ class ImportTests(unittest.TestCase): with self.assertRaisesRegex(ValueError, 'embedded null'): imp.load_source(__name__, __file__ + "\0") + @support.cpython_only + def test_issue31315(self): + # There shouldn't be an assertion failure in imp.create_dynamic(), + # when spec.name is not a string. + create_dynamic = support.get_attribute(imp, 'create_dynamic') + class BadSpec: + name = None + origin = 'foo' + with self.assertRaises(TypeError): + create_dynamic(BadSpec()) + class ReloadTests(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Core and Builtins/2017-09-01-00-40-58.bpo-31315.ZX20bl.rst b/Misc/NEWS.d/next/Core and Builtins/2017-09-01-00-40-58.bpo-31315.ZX20bl.rst new file mode 100644 index 0000000..d13badb --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2017-09-01-00-40-58.bpo-31315.ZX20bl.rst @@ -0,0 +1,2 @@ +Fix an assertion failure in imp.create_dynamic(), when spec.name is not a +string. Patch by Oren Milman. diff --git a/Python/importdl.c b/Python/importdl.c index 32fb7e1..50231ff 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -103,6 +103,11 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp) if (name_unicode == NULL) { return NULL; } + if (!PyUnicode_Check(name_unicode)) { + PyErr_SetString(PyExc_TypeError, + "spec.name must be a string"); + goto error; + } name = get_encoded_name(name_unicode, &hook_prefix); if (name == NULL) { -- cgit v0.12