]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix for bug #417030: "print '%*s' fails for unicode string"
authorMarc-André Lemburg <mal@egenix.com>
Wed, 2 May 2001 14:21:53 +0000 (14:21 +0000)
committerMarc-André Lemburg <mal@egenix.com>
Wed, 2 May 2001 14:21:53 +0000 (14:21 +0000)
Lib/test/test_unicode.py
Objects/stringobject.c

index d77551642cd9a37a9c96b5a3e5a4008dfc2f35bb..0df821748f158a2a8dac75eaf3f3f7e85bfc42c3 100644 (file)
@@ -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
index bf5056e586b7c34e2c184944589d055a793ba05f..b9056792f20e699e3f552d4c5d637e8e2a26e9cc 100644 (file)
@@ -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;