forked from OSchip/llvm-project
Summary: __builtin_clz used for Log calculation returns an undefined result when argument is 0. I noticed that issue when was testing some fuzzers: ``` /src/libfuzzer/FuzzerTracePC.h:282:33: runtime error: shift exponent 450349 is too large for 32-bit type 'uint32_t' (aka 'unsigned int') #0 0x43d83f in operator() /src/libfuzzer/FuzzerTracePC.h:283:33 #1 0x43d83f in void fuzzer::TracePC::CollectFeatures<fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool*)::$_1>(fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool*)::$_1) const /src/libfuzzer/FuzzerTracePC.h:290 #2 0x43cbd4 in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool*) /src/libfuzzer/FuzzerLoop.cpp:445:7 #3 0x43e5f1 in fuzzer::Fuzzer::ReadAndExecuteSeedCorpora(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, fuzzer::fuzzer_allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) /src/libfuzzer/FuzzerLoop.cpp:706:5 #4 0x43e9e1 in fuzzer::Fuzzer::Loop(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, fuzzer::fuzzer_allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) /src/libfuzzer/FuzzerLoop.cpp:739:3 #5 0x432f8c in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /src/libfuzzer/FuzzerDriver.cpp:754:6 #6 0x42ee18 in main /src/libfuzzer/FuzzerMain.cpp:20:10 #7 0x7f17ffeb182f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) #8 0x407838 in _start (/out/rotate_fuzzer+0x407838) Reviewers: kcc Reviewed By: kcc Subscribers: llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D41457 llvm-svn: 321211 |
||
|---|---|---|
| .. | ||
| afl | ||
| scripts | ||
| standalone | ||
| tests | ||
| CMakeLists.txt | ||
| FuzzerClangCounters.cpp | ||
| FuzzerCommand.h | ||
| FuzzerCorpus.h | ||
| FuzzerCrossOver.cpp | ||
| FuzzerDefs.h | ||
| FuzzerDictionary.h | ||
| FuzzerDriver.cpp | ||
| FuzzerExtFunctions.def | ||
| FuzzerExtFunctions.h | ||
| FuzzerExtFunctionsDlsym.cpp | ||
| FuzzerExtFunctionsDlsymWin.cpp | ||
| FuzzerExtFunctionsWeak.cpp | ||
| FuzzerExtFunctionsWeakAlias.cpp | ||
| FuzzerExtraCounters.cpp | ||
| FuzzerFlags.def | ||
| FuzzerIO.cpp | ||
| FuzzerIO.h | ||
| FuzzerIOPosix.cpp | ||
| FuzzerIOWindows.cpp | ||
| FuzzerInterface.h | ||
| FuzzerInternal.h | ||
| FuzzerLoop.cpp | ||
| FuzzerMain.cpp | ||
| FuzzerMerge.cpp | ||
| FuzzerMerge.h | ||
| FuzzerMutate.cpp | ||
| FuzzerMutate.h | ||
| FuzzerOptions.h | ||
| FuzzerRandom.h | ||
| FuzzerSHA1.cpp | ||
| FuzzerSHA1.h | ||
| FuzzerShmem.h | ||
| FuzzerShmemFuchsia.cpp | ||
| FuzzerShmemPosix.cpp | ||
| FuzzerShmemWindows.cpp | ||
| FuzzerTracePC.cpp | ||
| FuzzerTracePC.h | ||
| FuzzerUtil.cpp | ||
| FuzzerUtil.h | ||
| FuzzerUtilDarwin.cpp | ||
| FuzzerUtilFuchsia.cpp | ||
| FuzzerUtilLinux.cpp | ||
| FuzzerUtilPosix.cpp | ||
| FuzzerUtilWindows.cpp | ||
| FuzzerValueBitMap.h | ||
| README.txt | ||
| build.sh | ||
README.txt
See http://llvm.org/docs/LibFuzzer.html