From a7446e3438194e8abdfe75c2667b03a219e22a0b Mon Sep 17 00:00:00 2001
From: Brett Cannon <bcannon@gmail.com>
Date: Mon, 27 Feb 2006 23:39:10 +0000
Subject: [PATCH] Check the return code for PyErr_Warn() when warning about
 raising string exceptions.  This was triggered when 'warnings' had a filter
 set to "error" that caught the string exception deprecation warning.

---
 Misc/NEWS      | 4 ++++
 Python/ceval.c | 9 +++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/Misc/NEWS b/Misc/NEWS
index 4e16038deb..3ad50b5df4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.5 alpha 1?
 Core and builtins
 -----------------
 
+- Properly check if 'warnings' raises an exception (usually when a filter set
+  to "error" is triggered) when raising a warning for raising string
+  exceptions.
+
 - CO_GENERATOR_ALLOWED is no longer defined, this behavior is the default.
   The name was removed from Include/code.h.
 
diff --git a/Python/ceval.c b/Python/ceval.c
index e2f38acc47..2c2104e034 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2997,13 +2997,14 @@ do_raise(PyObject *type, PyObject *value, PyObject *tb)
 		Py_DECREF(tmp);
 	}
 
-	if (PyString_CheckExact(type))
+	if (PyString_CheckExact(type)) {
 		/* Raising builtin string is deprecated but still allowed --
 		 * do nothing.  Raising an instance of a new-style str
 		 * subclass is right out. */
-		PyErr_Warn(PyExc_PendingDeprecationWarning,
-			   "raising a string exception is deprecated");
-
+		if (-1 == PyErr_Warn(PyExc_PendingDeprecationWarning,
+			   "raising a string exception is deprecated"))
+			goto raise_error;
+	}
 	else if (PyClass_Check(type))
 		PyErr_NormalizeException(&type, &value, &tb);
 
-- 
2.49.0