summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_unicode.py2
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/unicodeobject.c2
3 files changed, 6 insertions, 1 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 382b463..518d6d6 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -2048,6 +2048,8 @@ class UnicodeTest(string_tests.CommonTest,
b'%c', c_int(0xabcd))
check_format('\U0010ffff',
b'%c', c_int(0x10ffff))
+ with self.assertRaises(OverflowError):
+ PyUnicode_FromFormat(b'%c', c_int(0x110000))
# Issue #18183
check_format('\U00010000\U00100000',
b'%c%c', c_int(0x10000), c_int(0x100000))
diff --git a/Misc/NEWS b/Misc/NEWS
index ffbf4dd..8e0b300 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
Core and Builtins
-----------------
+- Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
+ OverflowError when an argument of %c format is out of range.
+
- Issue #18137: Detect integer overflow on precision in float.__format__()
and complex.__format__().
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index c40e9ec..5659c71 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2496,7 +2496,7 @@ unicode_fromformat_arg(_PyUnicodeWriter *writer,
{
int ordinal = va_arg(*vargs, int);
if (ordinal < 0 || ordinal > MAX_UNICODE) {
- PyErr_SetString(PyExc_ValueError,
+ PyErr_SetString(PyExc_OverflowError,
"character argument not in range(0x110000)");
return NULL;
}