diff Python/pythonrun.c @ 40016:e65836815791 2.4

[Backport r50685 | neal.norwitz] 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.
author Andrew M. Kuchling <amk@amk.ca>
date Thu, 05 Oct 2006 18:57:54 +0000
parents 8c83fd79cee5
children 6860ba88d67e
line wrap: on
line diff
--- a/Python/pythonrun.c	Thu Oct 05 18:49:36 2006 +0000
+++ b/Python/pythonrun.c	Thu Oct 05 18:57:54 2006 +0000
@@ -1080,6 +1080,17 @@
 			}
 			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_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);