Issue #6415: Fixed warnings.warn sagfault on bad formatted string.

This commit is contained in:
Hirokazu Yamamoto 2009-07-17 06:20:46 +00:00
parent 66da2635ff
commit e78e5d2e51
2 changed files with 15 additions and 0 deletions

View File

@ -327,6 +327,19 @@ class WarnTests(unittest.TestCase):
self.module.warn_explicit,
None, Warning, None, 1, registry=42)
def test_bad_str(self):
# issue 6415
# Warnings instance with a bad format string for __str__ should not
# trigger a bus error.
class BadStrWarning(Warning):
"""Warning with a bad format string for __str__."""
def __str__(self):
return ("A bad formatted string %(err)" %
{"err" : "there is no %(err)s"})
with self.assertRaises(ValueError):
self.module.warn(BadStrWarning())
class CWarnTests(BaseTest, WarnTests):
module = c_warnings

View File

@ -317,6 +317,8 @@ warn_explicit(PyObject *category, PyObject *message,
}
if (rc == 1) {
text = PyObject_Str(message);
if (text == NULL)
goto cleanup;
category = (PyObject*)message->ob_type;
}
else {