Skip to content

Commit 7cf21f3

Browse files
committed
Fix FN for size_t, uintmax_t passed as %lx and %llx into printf
1 parent f0a7365 commit 7cf21f3

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

lib/checkio.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,8 +1003,14 @@ void CheckIO::checkFormatString(const Token * const tok,
10031003
if (specifier[1] == 'l') {
10041004
if (argInfo.typeToken->str() != "long" || !argInfo.typeToken->isLong())
10051005
invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo);
1006+
else if (typesMatch(argInfo.typeToken->originalName(), "size_t") ||
1007+
argInfo.typeToken->originalName() == "uintmax_t")
1008+
invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo);
10061009
} else if (argInfo.typeToken->str() != "long" || argInfo.typeToken->isLong())
10071010
invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo);
1011+
else if (typesMatch(argInfo.typeToken->originalName(), "size_t") ||
1012+
argInfo.typeToken->originalName() == "uintmax_t")
1013+
invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo);
10081014
break;
10091015
case 'j':
10101016
if (argInfo.typeToken->originalName() != "uintmax_t")

test/testio.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3380,15 +3380,15 @@ class TestIO : public TestFixture {
33803380
TEST_PRINTF_WARN("%lx","unsigned long","double");
33813381
TEST_PRINTF_WARN("%lx","unsigned long","long double");
33823382
TEST_PRINTF_WARN("%lx","unsigned long","void *");
3383-
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","size_t", "unsigned long long");
3383+
TEST_PRINTF_WARN_AKA("%lx","unsigned long","size_t", "unsigned long", "unsigned long long");
33843384
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","ssize_t", "signed long long");
33853385
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","ptrdiff_t", "signed long long");
33863386
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","unsigned ptrdiff_t", "unsigned long long");
33873387
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","intmax_t", "signed long long");
3388-
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","uintmax_t", "unsigned long long");
3388+
TEST_PRINTF_WARN_AKA("%lx","unsigned long","uintmax_t", "unsigned long", "unsigned long long");
33893389
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","intptr_t", "signed long long");
33903390
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","uintptr_t", "unsigned long long");
3391-
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","std::size_t", "unsigned long long");
3391+
TEST_PRINTF_WARN_AKA("%lx","unsigned long","std::size_t", "unsigned long", "unsigned long long");
33923392
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","std::ssize_t", "signed long long");
33933393
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","std::ptrdiff_t", "signed long long");
33943394
TEST_PRINTF_WARN_AKA_WIN64("%lx","unsigned long","std::intmax_t", "signed long long");
@@ -3444,15 +3444,15 @@ class TestIO : public TestFixture {
34443444
TEST_PRINTF_WARN("%llx","unsigned long long","double");
34453445
TEST_PRINTF_WARN("%llx","unsigned long long","long double");
34463446
TEST_PRINTF_WARN("%llx","unsigned long long","void *");
3447-
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","size_t", "unsigned long");
3447+
TEST_PRINTF_WARN_AKA("%llx","unsigned long long","size_t", "unsigned long", "unsigned long long");
34483448
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","ssize_t", "signed long");
34493449
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","ptrdiff_t", "signed long");
34503450
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","unsigned ptrdiff_t", "unsigned long");
34513451
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","intmax_t", "signed long");
3452-
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","uintmax_t", "unsigned long");
3452+
TEST_PRINTF_WARN_AKA("%llx","unsigned long long","uintmax_t", "unsigned long", "unsigned long long");
34533453
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","intptr_t", "signed long");
34543454
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","uintptr_t", "unsigned long");
3455-
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","std::size_t", "unsigned long");
3455+
TEST_PRINTF_WARN_AKA("%llx","unsigned long long","std::size_t", "unsigned long", "unsigned long long");
34563456
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","std::ssize_t", "signed long");
34573457
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","std::ptrdiff_t", "signed long");
34583458
TEST_PRINTF_WARN_AKA_WIN32("%llx","unsigned long long","std::intmax_t", "signed long");

0 commit comments

Comments
 (0)