summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric V. Smith <eric@trueblade.com>2014-04-15 07:05:02 (GMT)
committerEric V. Smith <eric@trueblade.com>2014-04-15 07:05:02 (GMT)
commita0d107324d38ab6fc5af4c6fee272e1097f98f49 (patch)
treeaed38f812bcc7556a1899b4756e7af94fd909ab4
parent9417764e0164711886ee5416204b59ec47ef54c7 (diff)
downloadcpython-a0d107324d38ab6fc5af4c6fee272e1097f98f49.zip
cpython-a0d107324d38ab6fc5af4c6fee272e1097f98f49.tar.gz
cpython-a0d107324d38ab6fc5af4c6fee272e1097f98f49.tar.bz2
Closed issue #8931: Make alternate formatting for 'c' raise an exception. Patch by Torsten Landschoff.
-rw-r--r--Lib/test/test_types.py2
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/formatter_unicode.c7
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index ec10752..11d9546 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -343,6 +343,8 @@ class TypesTests(unittest.TestCase):
self.assertRaises(ValueError, 3 .__format__, ",n")
# can't have ',' with '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
for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
diff --git a/Misc/NEWS b/Misc/NEWS
index 45401d6..a158999 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -34,6 +34,10 @@ Core and Builtins
replacement fields. It now matches the behavior of str.format() in
this regard. Patches by Phil Elson and Ramchandra Apte.
+- Issue #8931: Make alternate formatting ('#') for type 'c' raise an
+ exception. It had no effect, now trying to specify it is an error.
+ Patch by Torsten Landschoff.
+
Library
-------
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index e3a8149..056bb76 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -846,6 +846,13 @@ format_long_internal(PyObject *value, const InternalFormatSpec *format,
" format specifier 'c'");
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() */
/* Integer input truncated to a character */