This commit fixes the check in the return value from the DuplicateFile
function, which returns a new file descriptor. DuplicateFile can
return 0 if that file descriptor is available (for example, if stdin has
already been closed).
In particular, this could cause a bug with the -close_fd_mask flag in
some platforms: just call the fuzzer with stdin closed and the
-close_fd_mask=2 flag, and stderr will not be muted.
Example fuzzer:
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) { fprintf(stderr, "STDERR\n"); fprintf(stdout, "STDOUT\n"); return 0; }
Invocation (muting both stderr and stdout):
./test -close_fd_mask=3 -runs=1 0<&- INFO: Seed: 1155116940 INFO: Loaded 1 modules (1 inline 8-bit counters): 1 [0x48b020, 0x48b021), INFO: Loaded 1 PC tables (1 PCs): 1 [0x478dc8,0x478dd8), INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes STDERR INFO: A corpus is not provided, starting from an empty corpus STDERR Done 2 runs in 0 second(s)