Skip to main content

IAR Embedded Workbench for RX 5.20

CERT-ARR38-C_d

In this section:
Synopsis

Guarantee that library functions do not form invalid pointers.

Enabled by default

Yes

Severity/Certainty

High/High

highhigh.png
Full description

C library functions that make changes to arrays or objects take at least two arguments: a pointer to the array or object and an integer indicating the number of elements or bytes to be manipulated. Supplying arguments to such a function might cause the function to form a pointer that does not point into or just past the end of the object, resulting in undefined behavior.

Coding standards
CERT ARR38-C

Guarantee that library functions do not form invalid pointers

CWE 121

Stack-based Buffer Overflow

CWE 119

Improper Restriction of Operations within the Bounds of a Memory Buffer

CWE 125

Out-of-bounds Read

CWE 123

Write-what-where Condition

CWE 805

Buffer Access with Incorrect Length Value

CWE 129

Improper Validation of Array Index

Code examples

The following code example fails the check and will give a warning:

#include <string.h>

void f4() {
    char p[40];
    const char *q = "Too short";
    size_t n = sizeof(p);
    memcpy(p, q, n);
}

The following code example passes the check and will not give a warning about this issue:

#include <string.h>

void f4() {
    char p[40];
    const char *q = "Too short";
    size_t n = sizeof(p) < strlen(q) + 1 ? sizeof(p) : strlen(q) + 1;
    memcpy(p, q, n);
}