mirror of
https://github.com/python/cpython.git
synced 2025-11-01 02:38:53 +00:00
Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
OverflowError when an argument of %c format is out of range.
This commit is contained in:
parent
36a7e4f74a
commit
8eeae2126c
3 changed files with 12 additions and 2 deletions
|
|
@ -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?
|
||||||
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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue