...
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 |
| C1331C1331, 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:
| PRQA QA-C | ||||||||||||||||||
Include Page | PRQA QA-C_v | PRQA QA-C_v | 1331, 1332, 1333, 3002, 3320, 3335 | Partially implemented |
Rule partially covered. | 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, "Pointers"Function 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" |
...