bpo-35454: Fix miscellaneous minor issues in error handling. (#11077)

* bpo-35454: Fix miscellaneous minor issues in error handling.

* Fix a null pointer dereference.
diff --git a/Python/_warnings.c b/Python/_warnings.c
index ccbc73f..7eedd13 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -255,7 +255,11 @@
     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 ebe1c50..de6ff29 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -5109,7 +5109,7 @@
             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 002fad30..ff2142d 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -129,8 +129,10 @@
 
     /* 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 15637c6..c4f0877 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2143,10 +2143,10 @@
     }
 
     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 6de32de..37ecc51 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1286,6 +1286,9 @@
         PyDict_SetItemString(interp->sysdict, "modules", modules);
         _PySys_EndInit(interp->sysdict, interp);
     }
+    else if (PyErr_Occurred()) {
+        goto handle_error;
+    }
 
     bimod = _PyImport_FindBuiltin("builtins", modules);
     if (bimod != NULL) {
@@ -1294,6 +1297,9 @@
             goto handle_error;
         Py_INCREF(interp->builtins);
     }
+    else if (PyErr_Occurred()) {
+        goto handle_error;
+    }
 
     /* initialize builtin exceptions */
     _PyExc_Init(bimod);