diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2018-04-26 00:28:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-26 00:28:14 (GMT) |
commit | 55299fffe328c3d2dfc222a22116b7e53bf2e962 (patch) | |
tree | 253d6415621887b9b60114e68c579f8aad4661ae /Python | |
parent | 730fb07c3c5f3e11be9d35efa71027229072778f (diff) | |
download | cpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.zip cpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.tar.gz cpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.tar.bz2 |
[2.7] bpo-33330: Improve error handling in PyImport_Cleanup(). (GH-6564). (GH-6605)
(cherry picked from commit e9d9494d6b2a5e0c2d48d22c7f0d5e95504b4f7e)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/import.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/Python/import.c b/Python/import.c index 1d74faf..f43a47c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -447,7 +447,9 @@ PyImport_Cleanup(void) dict = PyModule_GetDict(value); if (Py_VerboseFlag) PySys_WriteStderr("# clear __builtin__._\n"); - PyDict_SetItemString(dict, "_", Py_None); + if (PyDict_SetItemString(dict, "_", Py_None) < 0) { + PyErr_Clear(); + } } value = PyDict_GetItemString(modules, "sys"); if (value != NULL && PyModule_Check(value)) { @@ -457,7 +459,9 @@ PyImport_Cleanup(void) for (p = sys_deletes; *p != NULL; p++) { if (Py_VerboseFlag) PySys_WriteStderr("# clear sys.%s\n", *p); - PyDict_SetItemString(dict, *p, Py_None); + if (PyDict_SetItemString(dict, *p, Py_None) < 0) { + PyErr_Clear(); + } } for (p = sys_files; *p != NULL; p+=2) { if (Py_VerboseFlag) @@ -465,7 +469,9 @@ PyImport_Cleanup(void) v = PyDict_GetItemString(dict, *(p+1)); if (v == NULL) v = Py_None; - PyDict_SetItemString(dict, *p, v); + if (PyDict_SetItemString(dict, *p, v) < 0) { + PyErr_Clear(); + } } } @@ -475,7 +481,9 @@ PyImport_Cleanup(void) if (Py_VerboseFlag) PySys_WriteStderr("# cleanup __main__\n"); _PyModule_Clear(value); - PyDict_SetItemString(modules, "__main__", Py_None); + if (PyDict_SetItemString(modules, "__main__", Py_None) < 0) { + PyErr_Clear(); + } } /* The special treatment of __builtin__ here is because even @@ -510,10 +518,15 @@ PyImport_Cleanup(void) PySys_WriteStderr( "# cleanup[1] %s\n", name); _PyModule_Clear(value); - PyDict_SetItem(modules, key, Py_None); + if (PyDict_SetItem(modules, key, Py_None) < 0) { + PyErr_Clear(); + } ndone++; } } + if (PyErr_Occurred()) { + PyErr_Clear(); + } } while (ndone > 0); /* Next, delete all modules (still skipping __builtin__ and sys) */ @@ -528,7 +541,12 @@ PyImport_Cleanup(void) if (Py_VerboseFlag) PySys_WriteStderr("# cleanup[2] %s\n", name); _PyModule_Clear(value); - PyDict_SetItem(modules, key, Py_None); + if (PyDict_SetItem(modules, key, Py_None) < 0) { + PyErr_Clear(); + } + } + if (PyErr_Occurred()) { + PyErr_Clear(); } } @@ -538,14 +556,18 @@ PyImport_Cleanup(void) if (Py_VerboseFlag) PySys_WriteStderr("# cleanup sys\n"); _PyModule_Clear(value); - PyDict_SetItemString(modules, "sys", Py_None); + if (PyDict_SetItemString(modules, "sys", Py_None) < 0) { + PyErr_Clear(); + } } value = PyDict_GetItemString(modules, "__builtin__"); if (value != NULL && PyModule_Check(value)) { if (Py_VerboseFlag) PySys_WriteStderr("# cleanup __builtin__\n"); _PyModule_Clear(value); - PyDict_SetItemString(modules, "__builtin__", Py_None); + if (PyDict_SetItemString(modules, "__builtin__", Py_None) < 0) { + PyErr_Clear(); + } } /* Finally, clear and delete the modules directory */ |