From 849a1f10c937ce0782db95b85da391a49317c49e Mon Sep 17 00:00:00 2001 From: George Dunlap Date: Mon, 9 Oct 2017 16:04:11 +0200 Subject: [PATCH] fuzz/x86_emulate: clear errors after each iteration Once feof() returns true for a stream, it will continue to return true for that stream until clearerr() is called (or the stream is closed and re-opened). In llvm-clang-fast-mode, the same file descriptor is used for each iteration of the loop, meaning that the "Input too large" check was broken -- feof() would return true even if the fread() hadn't hit the end of the file. The result is that AFL generates testcases of arbitrary size. Fix this by clearing the error after each iteration. Signed-off-by: George Dunlap Reviewed-by: Jan Beulich --- tools/fuzz/x86_instruction_emulator/afl-harness.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/fuzz/x86_instruction_emulator/afl-harness.c b/tools/fuzz/x86_instruction_emulator/afl-harness.c index 154869336a..b4d15451b5 100644 --- a/tools/fuzz/x86_instruction_emulator/afl-harness.c +++ b/tools/fuzz/x86_instruction_emulator/afl-harness.c @@ -97,6 +97,8 @@ int main(int argc, char **argv) fclose(fp); fp = NULL; } + else + clearerr(fp); LLVMFuzzerTestOneInput(input, size); } -- 2.39.5