mirror of https://github.com/python/cpython
only recursively expand in the format spec (closes #17644)
This commit is contained in:
parent
36f74aa7f7
commit
d2b58a9880
|
@ -934,6 +934,8 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
self.assertEqual("{0:.0s}".format("ABC\u0410\u0411\u0412"),
|
self.assertEqual("{0:.0s}".format("ABC\u0410\u0411\u0412"),
|
||||||
'')
|
'')
|
||||||
|
|
||||||
|
self.assertEqual("{[{}]}".format({"{}": 5}), "5")
|
||||||
|
|
||||||
def test_format_map(self):
|
def test_format_map(self):
|
||||||
self.assertEqual(''.format_map({}), '')
|
self.assertEqual(''.format_map({}), '')
|
||||||
self.assertEqual('a'.format_map({}), 'a')
|
self.assertEqual('a'.format_map({}), 'a')
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 3.3.3 release candidate 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #17644: Fix a crash in str.format when curly braces are used in square
|
||||||
|
brackets.
|
||||||
|
|
||||||
- Issue #17983: Raise a SyntaxError for a ``global __class__`` statement in a
|
- Issue #17983: Raise a SyntaxError for a ``global __class__`` statement in a
|
||||||
class body.
|
class body.
|
||||||
|
|
||||||
|
|
|
@ -638,7 +638,7 @@ MarkupIterator_next(MarkupIterator *self, SubString *literal,
|
||||||
SubString *format_spec, Py_UCS4 *conversion,
|
SubString *format_spec, Py_UCS4 *conversion,
|
||||||
int *format_spec_needs_expanding)
|
int *format_spec_needs_expanding)
|
||||||
{
|
{
|
||||||
int at_end;
|
int at_end, hit_format_spec;
|
||||||
Py_UCS4 c = 0;
|
Py_UCS4 c = 0;
|
||||||
Py_ssize_t start;
|
Py_ssize_t start;
|
||||||
int count;
|
int count;
|
||||||
|
@ -723,12 +723,18 @@ MarkupIterator_next(MarkupIterator *self, SubString *literal,
|
||||||
|
|
||||||
/* we know we can't have a zero length string, so don't worry
|
/* we know we can't have a zero length string, so don't worry
|
||||||
about that case */
|
about that case */
|
||||||
|
hit_format_spec = 0;
|
||||||
while (self->str.start < self->str.end) {
|
while (self->str.start < self->str.end) {
|
||||||
switch (c = PyUnicode_READ_CHAR(self->str.str, self->str.start++)) {
|
switch (c = PyUnicode_READ_CHAR(self->str.str, self->str.start++)) {
|
||||||
|
case ':':
|
||||||
|
hit_format_spec = 1;
|
||||||
|
count = 1;
|
||||||
|
break;
|
||||||
case '{':
|
case '{':
|
||||||
/* the format spec needs to be recursively expanded.
|
/* the format spec needs to be recursively expanded.
|
||||||
this is an optimization, and not strictly needed */
|
this is an optimization, and not strictly needed */
|
||||||
*format_spec_needs_expanding = 1;
|
if (hit_format_spec)
|
||||||
|
*format_spec_needs_expanding = 1;
|
||||||
count++;
|
count++;
|
||||||
break;
|
break;
|
||||||
case '}':
|
case '}':
|
||||||
|
|
Loading…
Reference in New Issue