48 lines · cpp
1// RUN: %clangxx_msan -g %s -o %t2// RUN: %run %t3// RUN: not %run %t 2 2>&1 | FileCheck %s --check-prefix=CHECK-FPUTS4// RUN: not %run %t 3 3 2>&1 | FileCheck %s --check-prefix=CHECK-PUTS5 6#include <stdio.h>7#include <stdlib.h>8#include <string.h>9 10int test_fgets() {11 FILE *fp = fopen("/dev/zero", "r");12 char c;13 14 if (!fgets(&c, 1, fp))15 return 1;16 17 if (c == '1') // No error18 return 2;19 20 fclose(fp);21 return 0;22}23 24int test_fputs() {25 FILE *fp = fopen("/dev/null", "w");26 char buf[2];27 fputs(buf, fp); // BOOM28 return fclose(fp);29}30 31void test_puts() {32 char buf[2];33 puts(buf); // BOOM34}35 36int main(int argc, char *argv[]) {37 if (argc == 1)38 test_fgets();39 else if (argc == 2)40 test_fputs();41 else42 test_puts();43 return 0;44}45 46// CHECK-FPUTS: Uninitialized bytes in fputs at offset 0 inside47// CHECK-PUTS: Uninitialized bytes in puts at offset 0 inside48