1cdc3a89d5de90b2299c56f4a46c3de590c5184d1Ted Kremenek// RUN: %clang_cc1 -analyze -analyzer-checker=alpha.security.taint,debug.TaintTest %s -verify 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks 4b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef struct _FILE FILE; 5b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef __typeof(sizeof(int)) size_t; 6b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksextern FILE *stdin; 7b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef long ssize_t; 8b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); 9bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseint printf(const char * __restrict, ...); 10bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseint snprintf(char *, size_t, const char *, ...); 11b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksvoid free(void *ptr); 12b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks 13b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksstruct GetLineTestStruct { 14b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); 15b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks}; 16b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks 17b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksvoid getlineTest(void) { 18b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks FILE *fp; 19b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks char *line = 0; 20b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks size_t len = 0; 21b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks ssize_t read; 22b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks struct GetLineTestStruct T; 23b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks 24b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks while ((read = T.getline(&line, &len, stdin)) != -1) { 25b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks printf("%s", line); // no warning 26b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks } 27b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks free(line); 28b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks} 29bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose 30bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseclass opaque; 31bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rosevoid testOpaqueClass(opaque *obj) { 32bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose char buf[20]; 33bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose snprintf(buf, 20, "%p", obj); // don't crash trying to load *obj 34bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose} 35bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose 36