1 // RUN: %clangxx_asan -g %s -o %t 2 // RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-FWRITE 3 // RUN: not %run %t 1 2>&1 | FileCheck %s --check-prefix=CHECK-FREAD 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 int test_fread() { 9 FILE *f = fopen("/dev/zero", "r"); 10 char buf[2]; 11 fread(buf, sizeof(buf), 2, f); // BOOM 12 fclose(f); 13 return 0; 14 } 15 16 int test_fwrite() { 17 FILE *f = fopen("/dev/null", "w"); 18 char buf[2]; 19 fwrite(buf, sizeof(buf), 2, f); // BOOM 20 return fclose(f); 21 } 22 23 int main(int argc, char *argv[]) { 24 if (argc > 1) 25 test_fread(); 26 else 27 test_fwrite(); 28 return 0; 29 } 30 31 // CHECK-FREAD: {{.*ERROR: AddressSanitizer: stack-buffer-overflow}} 32 // CHECK-FREAD: #{{.*}} in {{(wrap_|__interceptor_)?}}fread 33 // CHECK-FWRITE: {{.*ERROR: AddressSanitizer: stack-buffer-overflow}} 34 // CHECK-FWRITE: #{{.*}} in {{(wrap_|__interceptor_)?}}fwrite 35