diff options
author | Marcos Pividori <mpividori@google.com> | 2016-12-13 17:46:25 +0000 |
---|---|---|
committer | Marcos Pividori <mpividori@google.com> | 2016-12-13 17:46:25 +0000 |
commit | 64d41473965d0e8d39f0c13fa38966ff0d365d8e (patch) | |
tree | 3f1b68865c418c70a7f22bd5432b7dad21834487 /llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp | |
parent | 178fe587454a4decec0b2c9c05f71fcb44cd9311 (diff) | |
download | bcm5719-llvm-64d41473965d0e8d39f0c13fa38966ff0d365d8e.tar.gz bcm5719-llvm-64d41473965d0e8d39f0c13fa38966ff0d365d8e.zip |
[libFuzzer] Fix bug in detecting timeouts when input string is empty.
I added a new flag RunningCB to know if the Fuzzer's main thread is
running the CB function, instead of using (!CurrentUnitSize).
(!CurrentUnitSize) doesn't work properly. For example, in FuzzerLoop.cpp,
inside ShuffleAndMinimize() function, we execute the callback with an
empty string (size=0). Previous implementation failed to detect timeouts
in that execution.
Also, I add a regression test for that case.
Differential Revision: https://reviews.llvm.org/D27433
llvm-svn: 289561
Diffstat (limited to 'llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp b/llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp new file mode 100644 index 00000000000..8066f480b65 --- /dev/null +++ b/llvm/lib/Fuzzer/test/TimeoutEmptyTest.cpp @@ -0,0 +1,14 @@ +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. + +// Simple test for a fuzzer. The fuzzer must find the empty string. +#include <cstdint> +#include <cstddef> + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + static volatile int Zero = 0; + if (!Size) + while(!Zero) + ; + return 0; +} |