36 lines
		
	
	
		
			903 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			903 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1  -analyze -analyzer-checker=alpha.security.taint,debug.TaintTest %s -verify
 | 
						|
// expected-no-diagnostics
 | 
						|
 | 
						|
typedef struct _FILE FILE;
 | 
						|
typedef __typeof(sizeof(int)) size_t;
 | 
						|
extern FILE *stdin;
 | 
						|
typedef long ssize_t;
 | 
						|
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
 | 
						|
int printf(const char * __restrict, ...);
 | 
						|
int snprintf(char *, size_t, const char *, ...);
 | 
						|
void free(void *ptr);
 | 
						|
 | 
						|
struct GetLineTestStruct {
 | 
						|
  ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
 | 
						|
};
 | 
						|
 | 
						|
void getlineTest(void) {
 | 
						|
  FILE *fp;
 | 
						|
  char *line = 0;
 | 
						|
  size_t len = 0;
 | 
						|
  ssize_t read;
 | 
						|
  struct GetLineTestStruct T;
 | 
						|
 | 
						|
  while ((read = T.getline(&line, &len, stdin)) != -1) {
 | 
						|
    printf("%s", line); // no warning
 | 
						|
  }
 | 
						|
  free(line);
 | 
						|
}
 | 
						|
 | 
						|
class opaque;
 | 
						|
void testOpaqueClass(opaque *obj) {
 | 
						|
  char buf[20];
 | 
						|
  snprintf(buf, 20, "%p", obj); // don't crash trying to load *obj
 | 
						|
}
 | 
						|
 |