]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
mprintf: do not ignore length modifiers of `%o`, `%x`, `%X`
authorArtSin <artsin666@gmail.com>
Mon, 21 Oct 2024 15:48:37 +0000 (19:48 +0400)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 24 Oct 2024 08:16:19 +0000 (10:16 +0200)
There are uses of `%lx` and `%zx` in the codebase, but `parsefmt`
interpreted them as `%x`.

Closes #15348

lib/mprintf.c

index 6a41d36f62c995dd90927d48ecd4f464bbc893af..11551a5d7a10adc0732b8913391f5a5165d3ccb6 100644 (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':