mprintf: do not ignore length modifiers of %o, %x, %X

There are uses of `%lx` and `%zx` in the codebase, but `parsefmt`
interpreted them as `%x`.

Closes #15348
This commit is contained in:
ArtSin 2024-10-21 19:48:37 +04:00 committed by Daniel Stenberg
parent f901ab84e6
commit 7ca164faba
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -455,15 +455,30 @@ static int parsefmt(const char *format,
flags |= FLAGS_UNSIGNED;
break;
case 'o':
type = FORMAT_INT;
if(flags & FLAGS_LONGLONG)
type = FORMAT_LONGLONG;
else if(flags & FLAGS_LONG)
type = FORMAT_LONG;
else
type = FORMAT_INT;
flags |= FLAGS_OCTAL;
break;
case 'x':
type = FORMAT_INTU;
if(flags & FLAGS_LONGLONG)
type = FORMAT_LONGLONGU;
else if(flags & FLAGS_LONG)
type = FORMAT_LONGU;
else
type = FORMAT_INTU;
flags |= FLAGS_HEX|FLAGS_UNSIGNED;
break;
case 'X':
type = FORMAT_INTU;
if(flags & FLAGS_LONGLONG)
type = FORMAT_LONGLONGU;
else if(flags & FLAGS_LONG)
type = FORMAT_LONGU;
else
type = FORMAT_INTU;
flags |= FLAGS_HEX|FLAGS_UPPER|FLAGS_UNSIGNED;
break;
case 'c':