...
C library functions that make changes to arrays or objects usually take at least two arguments: i.) a pointer to the array/object ii.) an integer indicating the number of elements or bytes to be manipulated. If the arguments are supplied improperly during such a function call, the function may cause the pointer to not point to the object at all or point past the end of the object. This would lead to undefined behavior ( ... ).
To make sure that this does not happen, programmer must keep in mind the following rules when using such functions:
...
| Code Block | ||
|---|---|---|
| ||
void f3(int *a) {
float b = 3.14;
const size_t n = sizeof(*b);
void *p = a;
void *q = &b;
memcpy(p, q, n);
/* More program code */
}
|
Compliant Solution // (
...
need to work on this)
This compliant solution makes sure that the of 'n' is not greater the the minimum of effective sizes of *p and *q. (write code for compatibility)
| Code Block | ||
|---|---|---|
| ||
void f3(int *a) {
float b = 3.14;
const size_t n = sizeof(*b);
void *p = a;
void *q = &b;
if (n <= size(*p) && n <= size(*q)) {
memcpy(p, q, n);
}
else {
/* Handle Error */
}
}
|
Noncompliant Code Example
...
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
ARR38-C | high | likely | medium | P18 | L1 |
Related Guidelines
API00-C. Functions should validate their parameters
WG14 Document: N1579 - Rule 5.34 Forming Invalid pointers by library functions.
Bibliography
WG14 Document: N1579 - Rule 5.34 Forming Invalid pointers by library functions.