stream.c revision 9843ba9be3560f7b283a6b5a927e4620cfce897d
1c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store region -verify %s 2c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu 3c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xutypedef __typeof__(sizeof(int)) size_t; 4c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xutypedef struct _IO_FILE FILE; 523d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu#define SEEK_SET 0 /* Seek from beginning of file. */ 623d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu#define SEEK_CUR 1 /* Seek from current position. */ 723d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu#define SEEK_END 2 /* Seek from end of file. */ 823d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuextern FILE *fopen(const char *path, const char *mode); 99843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xuextern int fclose(FILE *fp); 1023d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuextern size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 1123d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuextern int fseek (FILE *__stream, long int __off, int __whence); 1223d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuextern long int ftell (FILE *__stream); 1323d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuextern void rewind (FILE *__stream); 14c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu 15c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xuvoid f1(void) { 16c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu FILE *p = fopen("foo", "r"); 17c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu char buf[1024]; 18c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu fread(buf, 1, 1, p); // expected-warning {{Stream pointer might be NULL.}} 19c196095fa0b83d10b2c20fccfcb8198ee66451aaZhongxing Xu} 2023d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu 2123d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuvoid f2(void) { 2223d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu FILE *p = fopen("foo", "r"); 2323d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu fseek(p, 1, SEEK_SET); // expected-warning {{Stream pointer might be NULL.}} 2423d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu} 2523d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu 2623d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuvoid f3(void) { 2723d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu FILE *p = fopen("foo", "r"); 2823d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu ftell(p); // expected-warning {{Stream pointer might be NULL.}} 2923d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu} 3023d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu 3123d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xuvoid f4(void) { 3223d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu FILE *p = fopen("foo", "r"); 3323d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu rewind(p); // expected-warning {{Stream pointer might be NULL.}} 3423d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu} 3523d90f90413ff1efd7e4410d28ae2cab99af1fdbZhongxing Xu 360c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xuvoid f5(void) { 370c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu FILE *p = fopen("foo", "r"); 380c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu if (!p) 390c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu return; 400c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu fseek(p, 1, SEEK_SET); // no-warning 410c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu fseek(p, 1, 3); // expected-warning {{The whence argument to fseek() should be SEEK_SET, SEEK_END, or SEEK_CUR.}} 420c2e8c87f18e861cb48965784e20b9292fb70b60Zhongxing Xu} 439843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xu 449843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xuvoid f6(void) { 459843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xu FILE *p = fopen("foo", "r"); 469843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xu fclose(p); 479843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xu fclose(p); // expected-warning {{Try to close a file Descriptor already closed. Cause Undefined Behaviour.}} 489843ba9be3560f7b283a6b5a927e4620cfce897dZhongxing Xu} 49