mprintf: treat %o as unsigned, add tests for %o, %x, %X
`%x` and `%X` were already treated as unsigned, but `%o` was not, even though it was used with unsigned numbers. Closes #15348
This commit is contained in:
parent
7ca164faba
commit
0325e1b9b2
1
.mailmap
1
.mailmap
@ -111,3 +111,4 @@ Michael Osipov <michael.osipov@siemens.com> <michael-o@users.sf.net>
|
|||||||
Christian Weisgerber <naddy@mips.inka.de> <curl-library@lists.haxx.se>
|
Christian Weisgerber <naddy@mips.inka.de> <curl-library@lists.haxx.se>
|
||||||
Moritz Buhl <git@moritzbuhl.de>
|
Moritz Buhl <git@moritzbuhl.de>
|
||||||
Aki Sakurai <75532970+AkiSakurai@users.noreply.github.com>
|
Aki Sakurai <75532970+AkiSakurai@users.noreply.github.com>
|
||||||
|
Sinkevich Artem <artsin666@gmail.com>
|
||||||
|
|||||||
@ -456,12 +456,12 @@ static int parsefmt(const char *format,
|
|||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
if(flags & FLAGS_LONGLONG)
|
if(flags & FLAGS_LONGLONG)
|
||||||
type = FORMAT_LONGLONG;
|
type = FORMAT_LONGLONGU;
|
||||||
else if(flags & FLAGS_LONG)
|
else if(flags & FLAGS_LONG)
|
||||||
type = FORMAT_LONG;
|
type = FORMAT_LONGU;
|
||||||
else
|
else
|
||||||
type = FORMAT_INT;
|
type = FORMAT_INTU;
|
||||||
flags |= FLAGS_OCTAL;
|
flags |= FLAGS_OCTAL|FLAGS_UNSIGNED;
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
if(flags & FLAGS_LONGLONG)
|
if(flags & FLAGS_LONGLONG)
|
||||||
|
|||||||
@ -41,6 +41,7 @@ All curl_mprintf() signed long tests OK!
|
|||||||
All curl_mprintf() curl_off_t tests OK!
|
All curl_mprintf() curl_off_t tests OK!
|
||||||
All curl_mprintf() strings tests OK!
|
All curl_mprintf() strings tests OK!
|
||||||
All float strings tests OK!
|
All float strings tests OK!
|
||||||
|
All curl_mprintf() octal & hexadecimal tests OK!
|
||||||
</stdout>
|
</stdout>
|
||||||
</verify>
|
</verify>
|
||||||
|
|
||||||
|
|||||||
@ -1439,6 +1439,48 @@ static int test_float_formatting(void)
|
|||||||
|
|
||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int test_oct_hex_formatting(void)
|
||||||
|
{
|
||||||
|
int errors = 0;
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%ho %hx %hX", 0xFA10U, 0xFA10U, 0xFA10U);
|
||||||
|
errors += string_check(buf, "175020 fa10 FA10");
|
||||||
|
|
||||||
|
#if (SIZEOF_INT == 2)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%o %x %X", 0xFA10U, 0xFA10U, 0xFA10U);
|
||||||
|
errors += string_check(buf, "175020 fa10 FA10");
|
||||||
|
#elif (SIZEOF_INT == 4)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%o %x %X",
|
||||||
|
0xFABC1230U, 0xFABC1230U, 0xFABC1230U);
|
||||||
|
errors += string_check(buf, "37257011060 fabc1230 FABC1230");
|
||||||
|
#elif (SIZEOF_INT == 8)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%o %x %X",
|
||||||
|
0xFABCDEF123456780U, 0xFABCDEF123456780U, 0xFABCDEF123456780U);
|
||||||
|
errors += string_check(buf, "1752746757044321263600 fabcdef123456780 FABCDEF123456780");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (SIZEOF_LONG == 2)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%lo %lx %lX", 0xFA10UL, 0xFA10UL, 0xFA10UL);
|
||||||
|
errors += string_check(buf, "175020 fa10 FA10");
|
||||||
|
#elif (SIZEOF_LONG == 4)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%lo %lx %lX",
|
||||||
|
0xFABC1230UL, 0xFABC1230UL, 0xFABC1230UL);
|
||||||
|
errors += string_check(buf, "37257011060 fabc1230 FABC1230");
|
||||||
|
#elif (SIZEOF_LONG == 8)
|
||||||
|
curl_msnprintf(buf, sizeof(buf), "%lo %lx %lX",
|
||||||
|
0xFABCDEF123456780UL, 0xFABCDEF123456780UL, 0xFABCDEF123456780UL);
|
||||||
|
errors += string_check(buf, "1752746757044321263600 fabcdef123456780 FABCDEF123456780");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(!errors)
|
||||||
|
printf("All curl_mprintf() octal & hexadecimal tests OK!\n");
|
||||||
|
else
|
||||||
|
printf("Some curl_mprintf() octal & hexadecimal tests Failed!\n");
|
||||||
|
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
/* !checksrc! enable LONGLINE */
|
/* !checksrc! enable LONGLINE */
|
||||||
|
|
||||||
static int test_return_codes(void)
|
static int test_return_codes(void)
|
||||||
@ -1507,6 +1549,8 @@ CURLcode test(char *URL)
|
|||||||
|
|
||||||
errors += test_float_formatting();
|
errors += test_float_formatting();
|
||||||
|
|
||||||
|
errors += test_oct_hex_formatting();
|
||||||
|
|
||||||
errors += test_return_codes();
|
errors += test_return_codes();
|
||||||
|
|
||||||
if(errors)
|
if(errors)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user