Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This compliant solution modifies the format string so that the conversion specifiers correspond to the arguments.:

Code Block
bgColor#ccccff
langc
const char *error_msg = "Error occurred";
/* ... */
printf("%d:%s", 15, error_msg);

...

This compliant solution adds the length modifier ll to the %d format specifier so that the variadic function parser for printf() extracts the correct number of bytes from the variable argument list for the long long argument.:

Code Block
bgColor#ccccff
langc
long long a = 1;
const char msg[] = "Default message";
/* ... */
printf("%lld %s", a, msg);

...

This compliant solution avoids sending NULL to printf().:

Code Block
bgColor#ccccff
langc
char* string = NULL;
printf("%s %d\n", (string ? string : "null"), 1);

...

Tool

Version

Checker

Description

Compass/ROSE

 

 

Does not currently detect violations of this recommendation. Although the recommendation in general cannot be automated, because of the difficulty in enforcing contracts between a variadic function and its invokers, it would be fairly easy to enforce type correctness on arguments to the printf() family of functions.

ECLAIR

Include Page
ECLAIR_V
ECLAIR_V

callfmt

Partially implemented.

GCC

Include Page
GCC_V
GCC_V

 

Warns about inconsistently typed arguments to formatted output functions when the -Wall is used.

LDRA tool suite

Include Page
LDRA_V
LDRA_V

41 S

Partially implemented.

PRQA QA-C
Include Page
PRQA_V
PRQA_V

0179 (U)
0184 (U)
0185 (U)
0186 (U)
0190 (U)
0191 (U)
0192 (U)
0193 (U)
0194 (U)
0195 (U)
0196 (U)
0197 (U)
0198 (U)
0199 (U)
0200 (U)
0201 (U)
0206 (U)

Partially implemented.

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this recommendation on the CERT website.

...

ISO/IEC TR 24772:2013Type System [IHN]
Subprogram Signature Mismatch [OTR]
MISRA - C:2012Rule 1617.1 (required)

 

...