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));