brintos

brintos / llvm-project-archived public Read only

0
0
Text · 885 B · e050234 Raw
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