summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_unicodedata.py6
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/unicodedata.c12
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,
diff --git a/Misc/NEWS b/Misc/NEWS
index 8ca898b469..f42c8ec740 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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. */