Commit a12572ff authored by Eric V. Smith's avatar Eric V. Smith

Close issue #8931: Make alternate formatting for 'c' raise an exception. Patch...

Close issue #8931: Make alternate formatting for 'c' raise an exception. Patch by Torsten Landschoff.
parent 15b04eb4
...@@ -343,6 +343,8 @@ class TypesTests(unittest.TestCase): ...@@ -343,6 +343,8 @@ class TypesTests(unittest.TestCase):
self.assertRaises(ValueError, 3 .__format__, ",n") self.assertRaises(ValueError, 3 .__format__, ",n")
# can't have ',' with 'c' # can't have ',' with 'c'
self.assertRaises(ValueError, 3 .__format__, ",c") self.assertRaises(ValueError, 3 .__format__, ",c")
# can't have '#' with 'c'
self.assertRaises(ValueError, 3 .__format__, "#c")
# ensure that only int and float type specifiers work # ensure that only int and float type specifiers work
for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
......
...@@ -43,6 +43,10 @@ Core and Builtins ...@@ -43,6 +43,10 @@ Core and Builtins
replacement fields. It now matches the behavior of str.format() in replacement fields. It now matches the behavior of str.format() in
this regard. Patches by Phil Elson and Ramchandra Apte. this regard. Patches by Phil Elson and Ramchandra Apte.
- Issue #8931: Make alternate formatting ('#') for type 'c' raise an
exception. In versions prior to 3.5, '#' with 'c' had no effect. Now
specifying it is an error. Patch by Torsten Landschoff.
Library Library
------- -------
......
...@@ -846,6 +846,13 @@ format_long_internal(PyObject *value, const InternalFormatSpec *format, ...@@ -846,6 +846,13 @@ format_long_internal(PyObject *value, const InternalFormatSpec *format,
" format specifier 'c'"); " format specifier 'c'");
goto done; goto done;
} }
/* error to request alternate format */
if (format->alternate) {
PyErr_SetString(PyExc_ValueError,
"Alternate form (#) not allowed with integer"
" format specifier 'c'");
goto done;
}
/* taken from unicodeobject.c formatchar() */ /* taken from unicodeobject.c formatchar() */
/* Integer input truncated to a character */ /* Integer input truncated to a character */
......
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