[Bug c/88354] New: Please warn on the use of a va_list argument in *printf functions instead of v*printf
vincent-gcc at vinc17 dot net
gcc-bugzilla@gcc.gnu.org
Tue Dec 4 15:51:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88354
Bug ID: 88354
Summary: Please warn on the use of a va_list argument in
*printf functions instead of v*printf
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: vincent-gcc at vinc17 dot net
Target Milestone: ---
A {,f,d,s,sn}printf function can mistakenly be used instead of
v{,f,d,s,sn}printf. for instance, this is what happened in atop:
https://github.com/Atoptool/atop/pull/43/commits/0e43049493e65b412e1c0def62a09ceac2bb3110
Type checking should warn when this occurs. Implementing the warning is
possible because the {,f,d,s,sn}printf functions cannot take a va_list
argument, so that this is necessarily an error.
An example of buggy code for which one should get a warning:
#include <stdio.h>
#include <stdarg.h>
void f (int i, const char *s, ...)
{
if (i)
{
va_list args;
va_start (args, s);
fprintf (stderr, s, args);
va_end (args);
}
}
int main (void)
{
unsigned long d = 17;
f (1, "n = %lu\n", d);
return 0;
}
(The correct code is obtained by replacing fprintf with vfprintf.)
More information about the Gcc-bugs
mailing list