]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[Backport r50685 | neal.norwitz]
authorAndrew M. Kuchling <amk@amk.ca>
Thu, 5 Oct 2006 18:57:54 +0000 (18:57 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Thu, 5 Oct 2006 18:57:54 +0000 (18:57 +0000)
Reported by Klocwork #151.

v2 can be NULL if exception2 is NULL.  I don't think that condition can happen,
but I'm not sure it can't either.  Now the code will protect against either
being NULL.

Python/pythonrun.c

index 6d6d1d5de3af1ec520f693ffc533ead4a31619fe..e8392eee4f3950446e1c17067717c98fa9680d66 100644 (file)
@@ -1080,6 +1080,17 @@ PyErr_PrintEx(int set_sys_last_vars)
                        }
                        PyErr_Fetch(&exception2, &v2, &tb2);
                        PyErr_NormalizeException(&exception2, &v2, &tb2);
+                       /* It should not be possible for exception2 or v2
+                          to be NULL. However PyErr_Display() can't
+                          tolerate NULLs, so just be safe. */
+                       if (exception2 == NULL) {
+                               exception2 = Py_None;
+                               Py_INCREF(exception2);
+                       }
+                       if (v2 == NULL) {
+                               v2 = Py_None;
+                               Py_INCREF(v2);
+                       }
                        if (Py_FlushLine())
                                PyErr_Clear();
                        fflush(stdout);
@@ -1087,8 +1098,8 @@ PyErr_PrintEx(int set_sys_last_vars)
                        PyErr_Display(exception2, v2, tb2);
                        PySys_WriteStderr("\nOriginal exception was:\n");
                        PyErr_Display(exception, v, tb);
-                       Py_XDECREF(exception2);
-                       Py_XDECREF(v2);
+                       Py_DECREF(exception2);
+                       Py_DECREF(v2);
                        Py_XDECREF(tb2);
                }
                Py_XDECREF(result);