]> granicus.if.org Git - python/commitdiff
Reported by Klocwork #151.
authorNeal Norwitz <nnorwitz@gmail.com>
Mon, 17 Jul 2006 00:59:04 +0000 (00:59 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Mon, 17 Jul 2006 00:59:04 +0000 (00:59 +0000)
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 7e5c696a2c01182b0a3f7c25569078af597754c2..95a337269b79f169e6789d9d73efcfbc932a2ecf 100644 (file)
@@ -1064,6 +1064,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);
@@ -1071,8 +1082,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);