...
In this example, the function pointer fp
is used to refer to the function strchr()
. However, fp
is declared without a function prototype. As a result, there is no type checking performed on the call to fp(12,2);
.
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdio.h> #include <string.h> char *(*fp) (); int main(void) { char *c; fp = strchr; c = fp(12, 2); printf("%s\n", c); return 0; } |
...
Declaring fp
with a function prototype corrects this example.
Code Block | ||||
---|---|---|---|---|
| ||||
#include <string.h> char *(*fp) (const char *, int); int main(void) { char *c; fp = strchr; c = fp("Hello",'H'); printf("%s\n", c); return 0; } |
...
In this noncompliant code example from a vulnerability in the useradd()
function of the shadow-utils
package CVE-2006-1174 , the third argument to open()
has been accidentally omitted.
Code Block | ||||
---|---|---|---|---|
| ||||
fd = open(ms, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC); |
...
To correct this example, a third argument is specified in the call to open()
.
Code Block | ||||
---|---|---|---|---|
| ||||
/* ... */ fd = open(ms, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, file_access_permissions); if (fd == -1){ /* Handle error */ } /* ... */ |
...