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)}}
 | 
						|
}
 |