MISRAC++2008-5-0-16_d
Synopsis
(Required) A pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array.
Enabled by default
Yes
Severity/Certainty
High/High

Full description
An array access might be out of bounds for some execution paths. This check is identical to ARR-inv-index-pos, MISRAC2012-Rule-18.1_b, CERT-ARR30-C_b.
Coding standards
- CERT ARR33-C
Guarantee that copies are made into storage of sufficient size
- CWE 119
Improper Restriction of Operations within the Bounds of a Memory Buffer
- CWE 120
Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')
- CWE 121
Stack-based Buffer Overflow
- CWE 124
Buffer Underwrite ('Buffer Underflow')
- CWE 126
Buffer Over-read
- CWE 127
Buffer Under-read
- CWE 129
Improper Validation of Array Index
- MISRA C:2012 Rule-18.1
(Required) A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand
Code examples
The following code example fails the check and will give a warning:
int cond;
int main(void)
{
int a[7];
int x;
if (cond)
x = 3;
else
x = 20;
a[x] = 0; //x may be set to 20 in line 11
//but a only has an interval of [0,6]
return 0;
}
The following code example passes the check and will not give a warning about this issue:
int cond;
int main(void)
{
int a[25];
int x;
if (cond)
x = 3;
else
x = 20;
a[x] = 0; //here, both possible values of
//x are in the interval [0,24]
return 0;
}