...
Code Block | ||
---|---|---|
| ||
char const *p; void dont_do_this() { char const str[] = "This will change"; p = str; /* dangerous */ /* // ... */ } void innocuous() { char const str[] = "Surprise, surprise"; } /* // ... */ dont_do_this(); innocuous(); /* now, it is likely that p is pointing to "Surprise, surprise" */ |
...
Code Block | ||
---|---|---|
| ||
void this_is_OK() {
char const str[] = "Everything OK";
char const *p = str;
/* // ... */
}
/* pointer p is now inaccessible outside the scope of string str */
|
...
Code Block | ||
---|---|---|
| ||
char const *p;
void is_this_OK() {
char const str[] = "Everything OK?";
p = str;
/* // ... */
p = NULL;
}
|
Non-Compliant Code Example (Return Values)
...
Code Block | ||
---|---|---|
| ||
int main(int argc, char *argv[]) {
char array[10];
init_array(array);
/* // ... */
return 0;
}
void init_array(char array[]) {
/* Initialize array */
return;
}
|
...
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Automated Detection
The Coverity Prevent RETURN_LOCAL checker finds many instances where a function will return a pointer to a local stack variable.
...