diff options
-rw-r--r-- | Lib/test/test_unicodedata.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/unicodedata.c | 12 |
3 files changed, 19 insertions, 2 deletions
diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index 0023bf4406..92353f1ea9 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -6,7 +6,7 @@ """#" import unittest, test.test_support -import hashlib +import hashlib, sys encoding = 'utf-8' @@ -214,6 +214,10 @@ class UnicodeMiscTest(UnicodeDatabaseTest): count += 1 self.assert_(count >= 10) # should have tested at least the ASCII digits + def test_bug_1704793(self): + if sys.maxunicode == 65535: + self.assertRaises(KeyError, self.db.lookup, "GOTHIC LETTER FAIHU") + def test_main(): test.test_support.run_unittest( UnicodeMiscTest, @@ -26,6 +26,9 @@ Core and builtins Library ------- +- Bug #1704793: Raise KeyError if unicodedata.lookup cannot + represent the result in a single character. + - Change location of the package index to pypi.python.org/pypi - Bug #1701409: Fix a segfault in printing ctypes.c_char_p and diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index a30d30c8eb..1a32b64474 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1102,8 +1102,18 @@ unicodedata_lookup(PyObject* self, PyObject* args) return NULL; } +#ifndef Py_UNICODE_WIDE + if (code >= 0x10000) { + /* Raise KeyError for compatibility; the possibly more + correct ValueError was not documented as a possible + exception for 2.5.x and earlier. */ + PyErr_Format(PyExc_KeyError, "result %d larger than sys.maxunicode", + code); + return NULL; + } +#endif str[0] = (Py_UNICODE) code; - return PyUnicode_FromUnicode(str, 1); + return PyUnicode_FromUnicode(str, 1); } /* XXX Add doc strings. */ |