diff options
author | Benjamin Peterson <benjamin@python.org> | 2013-11-27 01:22:36 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2013-11-27 01:22:36 (GMT) |
commit | 0ee22bf7743dc9a6d593c432f787d7bfe70be199 (patch) | |
tree | 35c34cd1bd9814b4d0de300cd94c56ee4b33cb7f | |
parent | bb65b5bf1dcc17519e4173ecb64a86228cc5cb58 (diff) | |
download | cpython-0ee22bf7743dc9a6d593c432f787d7bfe70be199.zip cpython-0ee22bf7743dc9a6d593c432f787d7bfe70be199.tar.gz cpython-0ee22bf7743dc9a6d593c432f787d7bfe70be199.tar.bz2 |
fix format spec recursive expansion (closes #19729)
-rw-r--r-- | Lib/test/test_unicode.py | 1 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Objects/stringlib/unicode_format.h | 6 |
3 files changed, 7 insertions, 2 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 9dc3438..502d393 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -955,6 +955,7 @@ class UnicodeTest(string_tests.CommonTest, '') self.assertEqual("{[{}]}".format({"{}": 5}), "5") + self.assertEqual("0x{:0{:d}X}".format(0x0,16), "0x0000000000000000") def test_format_map(self): self.assertEqual(''.format_map({}), '') @@ -10,6 +10,8 @@ What's New in Python 3.3.4 release candidate 1? Core and Builtins ----------------- +- Issue #19729: In str.format(), fix recursive expansion in format spec. + - Issue #19638: Fix possible crash / undefined behaviour from huge (more than 2 billion characters) input strings in _Py_dg_strtod. diff --git a/Objects/stringlib/unicode_format.h b/Objects/stringlib/unicode_format.h index c1c2cf3..d4719a5 100644 --- a/Objects/stringlib/unicode_format.h +++ b/Objects/stringlib/unicode_format.h @@ -727,8 +727,10 @@ MarkupIterator_next(MarkupIterator *self, SubString *literal, while (self->str.start < self->str.end) { switch (c = PyUnicode_READ_CHAR(self->str.str, self->str.start++)) { case ':': - hit_format_spec = 1; - count = 1; + if (!hit_format_spec) { + count = 1; + hit_format_spec = 1; + } break; case '{': /* the format spec needs to be recursively expanded. |