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