From 542fe56cb9ed36bd8af8bd5cbfba9cdc7f3514f0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Lemburg?= Date: Wed, 2 May 2001 14:21:53 +0000 Subject: [PATCH] Fix for bug #417030: "print '%*s' fails for unicode string" --- Lib/test/test_unicode.py | 6 ++++++ 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 d77551642c..0df821748f 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 bf5056e586..b9056792f2 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; -- 2.49.0