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
test_fread()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
test_fwrite()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
main(int argc,char * argv[])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