From 1e53bbacedaed883104454693c29d1ad31f5029b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 16 Jul 2013 22:26:05 +0200 Subject: Issue #18408: handle PySys_GetObject() failure, raise a RuntimeError --- Modules/_pickle.c | 8 ++++++-- Modules/main.c | 4 +++- Python/bltinmodule.c | 5 +++++ Python/import.c | 14 ++++++++------ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Modules/_pickle.c b/Modules/_pickle.c index e7d7dd9..4ba185d 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1361,8 +1361,10 @@ whichmodule(PyObject *global, PyObject *global_name) search: modules_dict = PySys_GetObject("modules"); - if (modules_dict == NULL) + if (modules_dict == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules"); return NULL; + } i = 0; module_name = NULL; @@ -5542,8 +5544,10 @@ Unpickler_find_class(UnpicklerObject *self, PyObject *args) } modules_dict = PySys_GetObject("modules"); - if (modules_dict == NULL) + if (modules_dict == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules"); return NULL; + } module = PyDict_GetItemWithError(modules_dict, module_name); if (module == NULL) { diff --git a/Modules/main.c b/Modules/main.c index 0343dda..e592d8b 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -260,8 +260,10 @@ RunMainFromImporter(wchar_t *filename) /* argv0 is usable as an import source, so put it in sys.path[0] and import __main__ */ sys_path = PySys_GetObject("path"); - if (sys_path == NULL) + if (sys_path == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path"); goto error; + } if (PyList_SetItem(sys_path, 0, argv0)) { argv0 = NULL; goto error; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 949f029..06d71f7 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1550,6 +1550,11 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) return NULL; if (file == NULL || file == Py_None) { file = PySys_GetObject("stdout"); + if (file == NULL) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); + return NULL; + } + /* sys.stdout may be None when FILE* stdout isn't connected */ if (file == Py_None) Py_RETURN_NONE; diff --git a/Python/import.c b/Python/import.c index 2e5d205..a1c0aee 100644 --- a/Python/import.c +++ b/Python/import.c @@ -85,8 +85,10 @@ _PyImportZip_Init(void) int err = 0; path_hooks = PySys_GetObject("path_hooks"); - if (path_hooks == NULL) + if (path_hooks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks"); goto error; + } if (Py_VerboseFlag) PySys_WriteStderr("# installing zipimport hook\n"); @@ -944,11 +946,11 @@ PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path) { PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL; - if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) { - if ((path_hooks = PySys_GetObject("path_hooks"))) { - importer = get_path_importer(path_importer_cache, - path_hooks, path); - } + path_importer_cache = PySys_GetObject("path_importer_cache"); + path_hooks = PySys_GetObject("path_hooks"); + if (path_importer_cache != NULL && path_hooks != NULL) { + importer = get_path_importer(path_importer_cache, + path_hooks, path); } Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */ return importer; -- cgit v0.12