diff options
-rw-r--r-- | Lib/test/test_unicode.py | 6 | ||||
-rw-r--r-- | Objects/stringobject.c | 5 |
2 files changed, 9 insertions, 2 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index d775516..0df8217 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -366,6 +366,12 @@ verify('...%(foo)s...' % {u'foo':u"abc",u'def':123} == u'...abc...') verify('...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...1...2...3...abc...') verify('...%%...%%s...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...%...%s...1...2...3...abc...') verify('...%s...' % u"abc" == u'...abc...') +verify('%*s' % (5,u'abc',) == u' abc') +verify('%*s' % (-5,u'abc',) == u'abc ') +verify('%*.*s' % (5,2,u'abc',) == u' ab') +verify('%*.*s' % (5,3,u'abc',) == u' abc') +verify('%i %*.*s' % (10, 5,3,u'abc',) == u'10 abc') +verify('%i%s %*.*s' % (10, 3, 5,3,u'abc',) == u'103 abc') print 'done.' # Test builtin codecs diff --git a/Objects/stringobject.c b/Objects/stringobject.c index bf5056e..b905679 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -2781,6 +2781,7 @@ PyString_Format(PyObject *format, PyObject *args) int len; char formatbuf[FORMATBUFLEN]; /* For format{float,int,char}() */ char *fmt_start = fmt; + int argidx_start = argidx; fmt++; if (*fmt == '(') { @@ -2934,6 +2935,7 @@ PyString_Format(PyObject *format, PyObject *args) case 'r': if (PyUnicode_Check(v)) { fmt = fmt_start; + argidx = argidx_start; goto unicode; } if (c == 's') @@ -3098,8 +3100,7 @@ PyString_Format(PyObject *format, PyObject *args) Py_DECREF(args); args_owned = 0; } - /* Fiddle args right (remove the first argidx-1 arguments) */ - --argidx; + /* Fiddle args right (remove the first argidx arguments) */ if (PyTuple_Check(orig_args) && argidx > 0) { PyObject *v; int n = PyTuple_GET_SIZE(orig_args) - argidx; |