xref: /llvm-project/compiler-rt/test/msan/fgets_fputs.cpp (revision 5732cdc1be519eba3fe176cae2c8fea1e0ce7ea7)
1d21b3d34SFangrui Song // RUN: %clangxx_msan -g %s -o %t
2d21b3d34SFangrui Song // RUN: %run %t
3d21b3d34SFangrui Song // RUN: not %run %t 2 2>&1 | FileCheck %s --check-prefix=CHECK-FPUTS
4d21b3d34SFangrui Song // RUN: not %run %t 3 3 2>&1 | FileCheck %s --check-prefix=CHECK-PUTS
5d21b3d34SFangrui Song 
6d21b3d34SFangrui Song #include <stdio.h>
7d21b3d34SFangrui Song #include <stdlib.h>
8d21b3d34SFangrui Song #include <string.h>
9d21b3d34SFangrui Song 
test_fgets()10d21b3d34SFangrui Song int test_fgets() {
11d21b3d34SFangrui Song   FILE *fp = fopen("/dev/zero", "r");
12d21b3d34SFangrui Song   char c;
13d21b3d34SFangrui Song 
14d21b3d34SFangrui Song   if (!fgets(&c, 1, fp))
15d21b3d34SFangrui Song     return 1;
16d21b3d34SFangrui Song 
17d21b3d34SFangrui Song   if (c == '1') // No error
18d21b3d34SFangrui Song     return 2;
19d21b3d34SFangrui Song 
20d21b3d34SFangrui Song   fclose(fp);
21d21b3d34SFangrui Song   return 0;
22d21b3d34SFangrui Song }
23d21b3d34SFangrui Song 
test_fputs()24d21b3d34SFangrui Song int test_fputs() {
25d21b3d34SFangrui Song   FILE *fp = fopen("/dev/null", "w");
26d21b3d34SFangrui Song   char buf[2];
27d21b3d34SFangrui Song   fputs(buf, fp); // BOOM
28d21b3d34SFangrui Song   return fclose(fp);
29d21b3d34SFangrui Song }
30d21b3d34SFangrui Song 
test_puts()31d21b3d34SFangrui Song void test_puts() {
32d21b3d34SFangrui Song   char buf[2];
33d21b3d34SFangrui Song   puts(buf); // BOOM
34d21b3d34SFangrui Song }
35d21b3d34SFangrui Song 
main(int argc,char * argv[])36d21b3d34SFangrui Song int main(int argc, char *argv[]) {
37d21b3d34SFangrui Song   if (argc == 1)
38d21b3d34SFangrui Song     test_fgets();
39d21b3d34SFangrui Song   else if (argc == 2)
40d21b3d34SFangrui Song     test_fputs();
41d21b3d34SFangrui Song   else
42d21b3d34SFangrui Song     test_puts();
43d21b3d34SFangrui Song   return 0;
44d21b3d34SFangrui Song }
45d21b3d34SFangrui Song 
46*5732cdc1SMarco Elver // CHECK-FPUTS: Uninitialized bytes in fputs at offset 0 inside
47*5732cdc1SMarco Elver // CHECK-PUTS: Uninitialized bytes in puts at offset 0 inside
48