summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric V. Smith <eric@trueblade.com>2011-07-18 18:08:55 (GMT)
committerEric V. Smith <eric@trueblade.com>2011-07-18 18:08:55 (GMT)
commitc12469df227a7ec8a268c9a6dae4f52c70c0635a (patch)
tree6e803338b7602f564998ae57f5d670f7bf93a760
parent677b6530b024d905f094908f6519a0316cde5d77 (diff)
parent12ebefc9d3b7268d17d4a042767f712c46d03dfe (diff)
downloadcpython-c12469df227a7ec8a268c9a6dae4f52c70c0635a.zip
cpython-c12469df227a7ec8a268c9a6dae4f52c70c0635a.tar.gz
cpython-c12469df227a7ec8a268c9a6dae4f52c70c0635a.tar.bz2
Merge from 3.2.
-rw-r--r--Lib/test/test_unicode.py5
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS4
-rw-r--r--Objects/stringlib/string_format.h10
4 files changed, 20 insertions, 0 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 2cb923f..1da44b0 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -736,6 +736,11 @@ class UnicodeTest(string_tests.CommonTest,
self.assertRaises(TypeError, '{a'.format_map)
self.assertRaises(TypeError, '}a'.format_map)
+ # issue #12579: can't supply positional params to format_map
+ self.assertRaises(ValueError, '{}'.format_map, {'a' : 2})
+ self.assertRaises(ValueError, '{}'.format_map, 'a')
+ self.assertRaises(ValueError, '{a} {}'.format_map, {"a" : 2, "b" : 1})
+
def test_format_auto_numbering(self):
class C:
def __init__(self, x=100):
diff --git a/Misc/ACKS b/Misc/ACKS
index ed21b1a..da13b93 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -82,6 +82,7 @@ Eli Bendersky
Andrew Bennetts
Andy Bensky
Michel Van den Bergh
+Julian Berman
Eric Beser
Steven Bethard
Stephen Bevan
diff --git a/Misc/NEWS b/Misc/NEWS
index a456bf3..7632292 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@ What's New in Python 3.3 Alpha 1?
Core and Builtins
-----------------
+- Issue #12579: str.format_map() now raises a ValueError if used on a
+ format string that contains positional fields. Initial patch by
+ Julian Berman.
+
- Issue #10271: Allow warnings.showwarning() be any callable.
- Issue #11627: Fix segfault when __new__ on a exception returns a non-exception
diff --git a/Objects/stringlib/string_format.h b/Objects/stringlib/string_format.h
index 6f10727..6c7adcb 100644
--- a/Objects/stringlib/string_format.h
+++ b/Objects/stringlib/string_format.h
@@ -511,6 +511,16 @@ get_field_object(SubString *input, PyObject *args, PyObject *kwargs,
Py_DECREF(key);
}
else {
+ /* If args is NULL, we have a format string with a positional field
+ with only kwargs to retrieve it from. This can only happen when
+ used with format_map(), where positional arguments are not
+ allowed. */
+ if (args == NULL) {
+ PyErr_SetString(PyExc_ValueError, "Format string contains "
+ "positional fields");
+ goto error;
+ }
+
/* look up in args */
obj = PySequence_GetItem(args, index);
if (obj == NULL)