Commit 8eeae212 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise

OverflowError when an argument of %c format is out of range.
parent 36a7e4f7
...@@ -2024,6 +2024,8 @@ class UnicodeTest(string_tests.CommonTest, ...@@ -2024,6 +2024,8 @@ class UnicodeTest(string_tests.CommonTest,
# test "%c" # test "%c"
self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0xabcd)), '\uabcd') self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0xabcd)), '\uabcd')
self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0x10ffff)), '\U0010ffff') self.assertEqual(PyUnicode_FromFormat(b'%c', c_int(0x10ffff)), '\U0010ffff')
with self.assertRaises(OverflowError):
PyUnicode_FromFormat(b'%c', c_int(0x110000))
# Issue #18183 # Issue #18183
self.assertEqual( self.assertEqual(
PyUnicode_FromFormat(b'%c%c', c_int(0x10000), c_int(0x100000)), PyUnicode_FromFormat(b'%c%c', c_int(0x10000), c_int(0x100000)),
......
...@@ -12,6 +12,9 @@ What's New in Python 3.3.3 release candidate 1? ...@@ -12,6 +12,9 @@ What's New in Python 3.3.3 release candidate 1?
Core and Builtins 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__() - Issue #18137: Detect integer overflow on precision in float.__format__()
and complex.__format__(). and complex.__format__().
......
...@@ -2489,8 +2489,13 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) ...@@ -2489,8 +2489,13 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
switch (*f) { switch (*f) {
case 'c': case 'c':
{ {
Py_UCS4 ordinal = va_arg(count, int); int ordinal = va_arg(count, int);
maxchar = Py_MAX(maxchar, ordinal); if (ordinal < 0 || ordinal > MAX_UNICODE) {
PyErr_SetString(PyExc_OverflowError,
"%c arg not in range(0x110000)");
goto fail;
}
maxchar = Py_MAX(maxchar, (Py_UCS4)ordinal);
n++; n++;
break; break;
} }
......
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