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 Songint 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 Songint 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 Songvoid test_puts() { 32d21b3d34SFangrui Song char buf[2]; 33d21b3d34SFangrui Song puts(buf); // BOOM 34d21b3d34SFangrui Song } 35d21b3d34SFangrui Song main(int argc,char * argv[])36d21b3d34SFangrui Songint 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