Skip to content

Commit 99a51d4

Browse files
miss-islingtonserhiy-storchaka
authored andcommitted
[3.6] bpo-31315: Fix an assertion failure in imp.create_dynamic(), when spec.name is not a string. (GH-3257) (#3653)
(cherry picked from commit 9974e1b)
1 parent 113bc6f commit 99a51d4

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

Lib/test/test_imp.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,17 @@ def test_load_source(self):
318318
with self.assertRaisesRegex(ValueError, 'embedded null'):
319319
imp.load_source(__name__, __file__ + "\0")
320320

321+
@support.cpython_only
322+
def test_issue31315(self):
323+
# There shouldn't be an assertion failure in imp.create_dynamic(),
324+
# when spec.name is not a string.
325+
create_dynamic = support.get_attribute(imp, 'create_dynamic')
326+
class BadSpec:
327+
name = None
328+
origin = 'foo'
329+
with self.assertRaises(TypeError):
330+
create_dynamic(BadSpec())
331+
321332

322333
class ReloadTests(unittest.TestCase):
323334

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix an assertion failure in imp.create_dynamic(), when spec.name is not a
2+
string. Patch by Oren Milman.

Python/importdl.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp)
103103
if (name_unicode == NULL) {
104104
return NULL;
105105
}
106+
if (!PyUnicode_Check(name_unicode)) {
107+
PyErr_SetString(PyExc_TypeError,
108+
"spec.name must be a string");
109+
goto error;
110+
}
106111

107112
name = get_encoded_name(name_unicode, &hook_prefix);
108113
if (name == NULL) {

0 commit comments

Comments
 (0)