diff options
author | Oren Milman <orenmn@gmail.com> | 2017-09-19 11:39:47 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-09-19 11:39:47 (GMT) |
commit | 9974e1bcf3d0cec9b38b39b39b7ec8a1ebd9ef54 (patch) | |
tree | 5cd22abadd721260709dcd9e43ab6a173107f1e0 | |
parent | 6db7033192cd537ca987a65971acb01206c3ba82 (diff) | |
download | cpython-9974e1bcf3d0cec9b38b39b39b7ec8a1ebd9ef54.zip cpython-9974e1bcf3d0cec9b38b39b39b7ec8a1ebd9ef54.tar.gz cpython-9974e1bcf3d0cec9b38b39b39b7ec8a1ebd9ef54.tar.bz2 |
bpo-31315: Fix an assertion failure in imp.create_dynamic(), when spec.name is not a string. (#3257)
-rw-r--r-- | Lib/test/test_imp.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2017-09-01-00-40-58.bpo-31315.ZX20bl.rst | 2 | ||||
-rw-r--r-- | Python/importdl.c | 5 |
3 files changed, 18 insertions, 0 deletions
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) { |