forked from OSchip/llvm-project
28 lines
741 B
C++
28 lines
741 B
C++
// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.security.ReturnPtrRange -verify %s
|
|
|
|
int arr[10];
|
|
int *ptr;
|
|
|
|
int conjure_index();
|
|
|
|
int *test_element_index_lifetime() {
|
|
do {
|
|
int x = conjure_index();
|
|
ptr = arr + x;
|
|
if (x != 20)
|
|
return arr; // no-warning
|
|
} while (0);
|
|
return ptr; // expected-warning{{Returned pointer value points outside the original object (potential buffer overflow)}}
|
|
}
|
|
|
|
int *test_element_index_lifetime_with_local_ptr() {
|
|
int *local_ptr;
|
|
do {
|
|
int x = conjure_index();
|
|
local_ptr = arr + x;
|
|
if (x != 20)
|
|
return arr; // no-warning
|
|
} while (0);
|
|
return local_ptr; // expected-warning{{Returned pointer value points outside the original object (potential buffer overflow)}}
|
|
}
|