in range(0, 256).
self.assertEqual('{:{f}}{g}{}'.format(1, 3, g='g', f=2), ' 1g3')
self.assertEqual('{f:{}}{}{g}'.format(2, 4, f=1, g='g'), ' 14g')
+ def test_format_c_overflow(self):
+ # issue #7267
+ self.assertRaises(OverflowError, '{0:c}'.format, -1)
+ self.assertRaises(OverflowError, '{0:c}'.format, 256)
+
def test_buffer_is_readonly(self):
self.assertRaises(TypeError, sys.stdin.readinto, b"")
Core and Builtins
-----------------
+- Issue #7267: format(int, 'c') now raises OverflowError when the argument is
+ not in range(0, 256).
+
- Issue #24806: Prevent builtin types that are not allowed to be subclassed from
being subclassed through multiple inheritance.
x = PyLong_AsLong(value);
if (x == -1 && PyErr_Occurred())
goto done;
+#if STRINGLIB_IS_UNICODE
#ifdef Py_UNICODE_WIDE
if (x < 0 || x > 0x10ffff) {
PyErr_SetString(PyExc_OverflowError,
"(narrow Python build)");
goto done;
}
+#endif
+#else
+ if (x < 0 || x > 0xff) {
+ PyErr_SetString(PyExc_OverflowError,
+ "%c arg not in range(0x100)");
+ goto done;
+ }
#endif
numeric_char = (STRINGLIB_CHAR)x;
pnumeric_chars = &numeric_char;