(original) (raw)
changeset: 84676:6bd01a59762a user: Victor Stinner victor.stinner@gmail.com date: Tue Jul 16 22:26:05 2013 +0200 files: Modules/_pickle.c Modules/main.c Python/bltinmodule.c Python/import.c description: Issue #18408: handle PySys_GetObject() failure, raise a RuntimeError diff -r 28ff7ac91477 -r 6bd01a59762a Modules/_pickle.c --- a/Modules/_pickle.c Tue Jul 16 22:24:44 2013 +0200 +++ b/Modules/_pickle.c Tue Jul 16 22:26:05 2013 +0200 @@ -1361,8 +1361,10 @@ 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 @@ } 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 -r 28ff7ac91477 -r 6bd01a59762a Modules/main.c --- a/Modules/main.c Tue Jul 16 22:24:44 2013 +0200 +++ b/Modules/main.c Tue Jul 16 22:26:05 2013 +0200 @@ -260,8 +260,10 @@ /* 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 -r 28ff7ac91477 -r 6bd01a59762a Python/bltinmodule.c --- a/Python/bltinmodule.c Tue Jul 16 22:24:44 2013 +0200 +++ b/Python/bltinmodule.c Tue Jul 16 22:26:05 2013 +0200 @@ -1550,6 +1550,11 @@ 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 -r 28ff7ac91477 -r 6bd01a59762a Python/import.c --- a/Python/import.c Tue Jul 16 22:24:44 2013 +0200 +++ b/Python/import.c Tue Jul 16 22:26:05 2013 +0200 @@ -85,8 +85,10 @@ 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 @@ 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; /victor.stinner@gmail.com