Commit 07c6e716 authored by Brett Cannon's avatar Brett Cannon

Issue #15778: Coerce ImportError.args to a string when it isn't

already one.

Patch by Dave Malcolm.
parent 491b1dc7
...@@ -937,6 +937,11 @@ class ImportErrorTests(unittest.TestCase): ...@@ -937,6 +937,11 @@ class ImportErrorTests(unittest.TestCase):
self.assertEqual(exc.name, 'somename') self.assertEqual(exc.name, 'somename')
self.assertEqual(exc.path, 'somepath') self.assertEqual(exc.path, 'somepath')
def test_non_str_argument(self):
# Issue #15778
arg = b'abc'
exc = ImportError(arg)
self.assertEqual(str(arg), str(exc))
def test_main(): def test_main():
......
...@@ -10,6 +10,9 @@ What's New in Python 3.3.0 Release Candidate 1? ...@@ -10,6 +10,9 @@ What's New in Python 3.3.0 Release Candidate 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #15778: ensure that str(ImportError(msg)) returns a str
even when msg isn't a str.
- Issue #2051: Source file permission bits are once again correctly - Issue #2051: Source file permission bits are once again correctly
copied to the cached bytecode file. (The migration to importlib copied to the cached bytecode file. (The migration to importlib
reintroduced this problem because these was no regression test. A test reintroduced this problem because these was no regression test. A test
......
...@@ -679,7 +679,7 @@ ImportError_traverse(PyImportErrorObject *self, visitproc visit, void *arg) ...@@ -679,7 +679,7 @@ ImportError_traverse(PyImportErrorObject *self, visitproc visit, void *arg)
static PyObject * static PyObject *
ImportError_str(PyImportErrorObject *self) ImportError_str(PyImportErrorObject *self)
{ {
if (self->msg) { if (self->msg && PyUnicode_CheckExact(self->msg)) {
Py_INCREF(self->msg); Py_INCREF(self->msg);
return self->msg; return self->msg;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment