JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.
If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.
If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.
| CodeSonar® 9.2p0 | CONFIDENTIAL | CodeSecure Inc |
A call to memcmp() where the type of one or both pointer arguments is not "pointer to X" with X one of the following.
See MISRA Checks: Essential Type Category for more information.
| Class Name | Inappropriate Argument to memcmp | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Significance | style | |||||||||
| Mnemonic | LANG.TYPE.IARGT.MEMCMP | |||||||||
| Categories |
|
|||||||||
| Availability | Available for C and C++. |
|||||||||
| Enabling | Checks for this warning class are disabled by default,
and require the unnormalized
C ASTs for the project. To enable them, add the following
WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes WARNING_FILTER += allow class="Inappropriate Argument to memcmp" |
#include <string.h>
typedef struct { int color; } S;
int lang_type_iargt_bad(const float *f1, const float *f2,
S *s1, S *s2, size_t sn,
const void *v1, const void *v2, size_t n
){
if (!memcmp(f1, f2, sizeof(float))){ /* 'Inappropriate Argument to memcmp' warning issued here
* - pointed-to type for f1 and f2 is 'float', which
* is not one of the types permitted for this warning class.
* - There are two warning instances (one for each pointer
* argument), in the same warning group.
*/
return 0;
}
if (!memcmp(s1, s2, sn)){ /* 'Inappropriate Argument to memcmp' warning issued here
* - pointed-to type for s1 and s2 is 'S' (a struct type)
* - There are two warning instances, in the same warning group.
*/
return 0;
}
if (!memcmp(v1, v2, n)) { /* 'Inappropriate Argument to memcmp' warning issued here
* -pointed-to type for v1 and v2 is 'void'
* - There are two warning instances, in the same warning group.
*/
return 0;
}
return 1;
}
int lang_type_iargt_ok(int *i1, int *i2, size_t sz){
if (!memcmp(i1, i2, sizeof(int))){ return 0; } /* ok: pointed-to type for i1 and i2 is 'int',
* which is an essentially signed type */
if (!memcmp(&i1, &sz, sz)){ return 0; } /* ok: pointed-to types are as follows
* - &i1: int* (pointer type)
* - &sz: size_t (essentially unsigned)
*/
return 1;
}
The following configuration file parameters affect checks for this warning class.
To report problems with this documentation, please visit https://support.codesecure.com/.