Fix for bug #417030: "print '%*s' fails for unicode string"
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('...%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 @@
 			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 @@
   			case 'r':
 				if (PyUnicode_Check(v)) {
 					fmt = fmt_start;
+					argidx = argidx_start;
 					goto unicode;
 				}
 				if (c == 's')
@@ -3098,8 +3100,7 @@
 		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;