Issue #10831: PyUnicode_FromFormat() supports %li, %lli and %zi formats
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 7597a46..cd0fccf 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -753,20 +753,20 @@
     size_tflag = 0;
 
     if (*f == 'l') {
-        if (f[1] == 'd' || f[1] == 'u') {
+        if (f[1] == 'd' || f[1] == 'u' || f[1] == 'i') {
             longflag = 1;
             ++f;
         }
 #ifdef HAVE_LONG_LONG
         else if (f[1] == 'l' &&
-                 (f[2] == 'd' || f[2] == 'u')) {
+                 (f[2] == 'd' || f[2] == 'u' || f[2] == 'i')) {
             longlongflag = 1;
             f += 2;
         }
 #endif
     }
     /* handle the size_t flag. */
-    else if (*f == 'z' && (f[1] == 'd' || f[1] == 'u')) {
+    else if (*f == 'z' && (f[1] == 'd' || f[1] == 'u' || f[1] == 'i')) {
         size_tflag = 1;
         ++f;
     }
@@ -1044,9 +1044,10 @@
                 *s++ = ordinal;
                 break;
             }
+            case 'i':
             case 'd':
                 makefmt(fmt, longflag, longlongflag, size_tflag, zeropad,
-                        width, precision, 'd');
+                        width, precision, *f);
                 if (longflag)
                     sprintf(realbuffer, fmt, va_arg(vargs, long));
 #ifdef HAVE_LONG_LONG
@@ -1075,11 +1076,6 @@
                     sprintf(realbuffer, fmt, va_arg(vargs, unsigned int));
                 appendstring(realbuffer);
                 break;
-            case 'i':
-                makefmt(fmt, 0, 0, 0, zeropad, width, precision, 'i');
-                sprintf(realbuffer, fmt, va_arg(vargs, int));
-                appendstring(realbuffer);
-                break;
             case 'x':
                 makefmt(fmt, 0, 0, 0, zeropad, width, precision, 'x');
                 sprintf(realbuffer, fmt, va_arg(vargs, int));