summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-12-10 23:05:13 -0800
committerGitHub <noreply@github.com>2018-12-10 23:05:13 -0800
commit62674f3a36ec55f86a5f20ee028a37fbd549bd6c (patch)
treee0e54395611c4a6eca057ea673c2d515fe45cd3b /Python
parent3b9a0186c44d0c3e477c38fdc00203ec99aec912 (diff)
downloadcpython-git-62674f3a36ec55f86a5f20ee028a37fbd549bd6c.tar.gz
bpo-35454: Fix miscellaneous minor issues in error handling. (GH-11077)
* bpo-35454: Fix miscellaneous minor issues in error handling. * Fix a null pointer dereference. (cherry picked from commit 8905fcc85a6fc3ac394bc89b0bbf40897e9497a6) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Python')
-rw-r--r--Python/_warnings.c6
-rw-r--r--Python/ceval.c2
-rw-r--r--Python/codecs.c6
-rw-r--r--Python/import.c4
-rw-r--r--Python/pylifecycle.c6
5 files changed, 18 insertions, 6 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 29e475d67d..80dca65fd3 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -256,7 +256,11 @@ already_warned(PyObject *registry, PyObject *key, int should_set)
version_obj = _PyDict_GetItemId(registry, &PyId_version);
if (version_obj == NULL
|| !PyLong_CheckExact(version_obj)
- || PyLong_AsLong(version_obj) != _PyRuntime.warnings.filters_version) {
+ || PyLong_AsLong(version_obj) != _PyRuntime.warnings.filters_version)
+ {
+ if (PyErr_Occurred()) {
+ return -1;
+ }
PyDict_Clear(registry);
version_obj = PyLong_FromLong(_PyRuntime.warnings.filters_version);
if (version_obj == NULL)
diff --git a/Python/ceval.c b/Python/ceval.c
index e371d345cc..00b2e6d85f 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -5027,7 +5027,7 @@ unicode_concatenate(PyObject *v, PyObject *w,
PyObject *names = f->f_code->co_names;
PyObject *name = GETITEM(names, oparg);
PyObject *locals = f->f_locals;
- if (PyDict_CheckExact(locals) &&
+ if (locals && PyDict_CheckExact(locals) &&
PyDict_GetItem(locals, name) == v) {
if (PyDict_DelItem(locals, name) != 0) {
PyErr_Clear();
diff --git a/Python/codecs.c b/Python/codecs.c
index eb3cd35fb8..c315ae3ed7 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -130,8 +130,10 @@ PyObject *_PyCodec_Lookup(const char *encoding)
/* Next, scan the search functions in order of registration */
args = PyTuple_New(1);
- if (args == NULL)
- goto onError;
+ if (args == NULL) {
+ Py_DECREF(v);
+ return NULL;
+ }
PyTuple_SET_ITEM(args,0,v);
len = PyList_Size(interp->codec_search_path);
diff --git a/Python/import.c b/Python/import.c
index 709fc4324e..5f5d135c7a 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2138,10 +2138,10 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
}
mod = _PyImport_FindExtensionObject(name, path);
- if (mod != NULL) {
+ if (mod != NULL || PyErr_Occurred()) {
Py_DECREF(name);
Py_DECREF(path);
- Py_INCREF(mod);
+ Py_XINCREF(mod);
return mod;
}
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 4b08c9c2b2..94b6d43c0e 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1417,6 +1417,9 @@ new_interpreter(PyThreadState **tstate_p)
PyDict_SetItemString(interp->sysdict, "modules", modules);
_PySys_EndInit(interp->sysdict, &interp->config);
}
+ else if (PyErr_Occurred()) {
+ goto handle_error;
+ }
bimod = _PyImport_FindBuiltin("builtins", modules);
if (bimod != NULL) {
@@ -1425,6 +1428,9 @@ new_interpreter(PyThreadState **tstate_p)
goto handle_error;
Py_INCREF(interp->builtins);
}
+ else if (PyErr_Occurred()) {
+ goto handle_error;
+ }
/* initialize builtin exceptions */
_PyExc_Init(bimod);