Issue #18408: handle PySys_GetObject() failure, raise a RuntimeError

This commit is contained in:
Victor Stinner 2013-07-16 22:26:05 +02:00
parent 1b63493ed1
commit 1e53bbaced
4 changed files with 22 additions and 9 deletions

View file

@ -1361,8 +1361,10 @@ whichmodule(PyObject *global, PyObject *global_name)
search: search:
modules_dict = PySys_GetObject("modules"); modules_dict = PySys_GetObject("modules");
if (modules_dict == NULL) if (modules_dict == NULL) {
PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
return NULL; return NULL;
}
i = 0; i = 0;
module_name = NULL; module_name = NULL;
@ -5542,8 +5544,10 @@ Unpickler_find_class(UnpicklerObject *self, PyObject *args)
} }
modules_dict = PySys_GetObject("modules"); modules_dict = PySys_GetObject("modules");
if (modules_dict == NULL) if (modules_dict == NULL) {
PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
return NULL; return NULL;
}
module = PyDict_GetItemWithError(modules_dict, module_name); module = PyDict_GetItemWithError(modules_dict, module_name);
if (module == NULL) { if (module == NULL) {

View file

@ -260,8 +260,10 @@ RunMainFromImporter(wchar_t *filename)
/* argv0 is usable as an import source, so put it in sys.path[0] /* argv0 is usable as an import source, so put it in sys.path[0]
and import __main__ */ and import __main__ */
sys_path = PySys_GetObject("path"); sys_path = PySys_GetObject("path");
if (sys_path == NULL) if (sys_path == NULL) {
PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path");
goto error; goto error;
}
if (PyList_SetItem(sys_path, 0, argv0)) { if (PyList_SetItem(sys_path, 0, argv0)) {
argv0 = NULL; argv0 = NULL;
goto error; goto error;

View file

@ -1550,6 +1550,11 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
return NULL; return NULL;
if (file == NULL || file == Py_None) { if (file == NULL || file == Py_None) {
file = PySys_GetObject("stdout"); 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 */ /* sys.stdout may be None when FILE* stdout isn't connected */
if (file == Py_None) if (file == Py_None)
Py_RETURN_NONE; Py_RETURN_NONE;

View file

@ -85,8 +85,10 @@ _PyImportZip_Init(void)
int err = 0; int err = 0;
path_hooks = PySys_GetObject("path_hooks"); 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; goto error;
}
if (Py_VerboseFlag) if (Py_VerboseFlag)
PySys_WriteStderr("# installing zipimport hook\n"); PySys_WriteStderr("# installing zipimport hook\n");
@ -944,11 +946,11 @@ PyAPI_FUNC(PyObject *)
PyImport_GetImporter(PyObject *path) { PyImport_GetImporter(PyObject *path) {
PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL; PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) { path_importer_cache = PySys_GetObject("path_importer_cache");
if ((path_hooks = PySys_GetObject("path_hooks"))) { path_hooks = PySys_GetObject("path_hooks");
importer = get_path_importer(path_importer_cache, if (path_importer_cache != NULL && path_hooks != NULL) {
path_hooks, path); importer = get_path_importer(path_importer_cache,
} path_hooks, path);
} }
Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */ Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
return importer; return importer;