...
In this noncompliant example, the C standard library function strchr()
is called through the function pointer fp
declared with a prototype with incorrectly typed arguments. According to the C Standard, 6.3.2.3, paragraph 8 [ISO/IEC 9899:20112024]
A pointer to a function of one type may be converted to a pointer to a function of another type and back again; the result shall compare equal to the original pointer. If a converted pointer is used to call a function whose type is not compatible with the referenced the referenced type, the behavior is undefined.
...
Tool | Version | Checker | Description | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Astrée |
| incompatible-argument-type parameter-match parameter-match-computed parameter-match-type | Fully checked | |||||||||||||||||||
Axivion Bauhaus Suite |
| CertC-EXP37 | ||||||||||||||||||||
CodeSonar |
| LANG.FUNCS.APM | Array parameter mismatch | |||||||||||||||||||
Compass/ROSE | Can detect some violations of this rule. In particular, it ensures that all calls to | |||||||||||||||||||||
Coverity |
| MISRA C 2012 Rule 8.2 MISRA C 2012 Rule 17.3 | Implemented Relies on functions declared with prototypes, allow compiler to check | |||||||||||||||||||
Cppcheck Premium |
| premium-cert-exp37-c | Fully implemented | |||||||||||||||||||
| CC2.EXP37 | Partially implemented | ||||||||||||||||||||
EDG | ||||||||||||||||||||||
GCC |
| Can detect violation of this rule when the | ||||||||||||||||||||
Helix QAC |
| Klocwork
| Klocwork
| MISRA.FUNC.UNMATCHED.PARAMS | C1331, C1332, C1333, C3002, C3320, C3335 C++0403 | |||||||||||||||||
Klocwork |
| MISRA.FUNC.UNMATCHED.PARAMS | ||||||||||||||||||||
LDRA tool suite |
| 41 D, 21 S, 98 S, 170 S, 496 S, 576 S | Partially implemented | |||||||||||||||||||
Parasoft C/C++test |
| CERT_C-EXP37-a |
| Identifiers Conversions shall | be given for all of the parameters in a function prototype declarationnot be performed between non compatible pointer to a function types | |||||||||||||||||
Polyspace Bug Finder |
| Checks for:
| statusAccess mode argument of function in Mismatch between function or variable declarations String specifiers do not match corresponding arguments Variable qualifier is lost during conversion Argument to a standard function does not meet requirements for use in the function Function pointer cast to another function pointer with different argument or return type All declarations of an object or function shall use the same names and type qualifiers Conversions shall not be performed between a pointer to a function and any other type A function shall not be declared implicitly |
Rule partially covered. | PRQA QA-C | |||||||||||||||||
Include Page | PRQA QA-C_v | PRQA QA-C_v | 1331, 1332, 1333, 3002, 3320, 3335 | Partially implemented | PRQA QA-C++ | Include Page | | cplusplus:PRQA QA-C++_V | cplusplus:PRQA QA-C++_V | 0403|||||||||||||
PVS-Studio |
| V540, V541, V549, V575, V632, V639, V666, V671, V742, V743, V764, V1004 | ||||||||||||||||||||
SonarQube C/C++ Plugin |
| S930 | Detects incorrect argument count | |||||||||||||||||||
RuleChecker |
| parameter-match parameter-match-type | Partially checked | |||||||||||||||||||
TrustInSoft Analyzer |
| unclassified ("function type matches") | Partially verified (see one compliant and one non-compliant example). |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...
- Wrong argument values or references
Bibliography
[CVE] | CVE-2006-1174 |
[ISO/IEC 9899:2011] | 6.35.2.32, "PointersFunction Calls" |
[ISO/IEC 9899:2024] | 6.53.2.23, "Function CallsPointers" |
[IEEE Std 1003.1:2013] | open() |
[Spinellis 2006] | Section 2.6.1, "Incorrect Routine or Arguments" |
...