1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[libFuzzer] detect leaks after every run when executing fixed inputs (./fuzzer -runs=1000000 my-file)

llvm-svn: 284514
This commit is contained in:
Kostya Serebryany 2016-10-18 18:38:08 +00:00
parent f5a046ca77
commit 5212c69d5c
3 changed files with 6 additions and 2 deletions

View File

@ -270,6 +270,7 @@ int RunOneTest(Fuzzer *F, const char *InputFilePath, size_t MaxLen) {
if (MaxLen && MaxLen < U.size()) if (MaxLen && MaxLen < U.size())
U.resize(MaxLen); U.resize(MaxLen);
F->RunOne(U.data(), U.size()); F->RunOne(U.data(), U.size());
F->TryDetectingAMemoryLeak(U.data(), U.size(), true);
return 0; return 0;
} }

View File

@ -101,6 +101,8 @@ public:
bool InFuzzingThread() const { return IsMyThread; } bool InFuzzingThread() const { return IsMyThread; }
size_t GetCurrentUnitInFuzzingThead(const uint8_t **Data) const; size_t GetCurrentUnitInFuzzingThead(const uint8_t **Data) const;
void TryDetectingAMemoryLeak(const uint8_t *Data, size_t Size,
bool DuringInitialCorpusExecution);
private: private:
void AlarmCallback(); void AlarmCallback();
@ -116,8 +118,6 @@ private:
void PrintStats(const char *Where, const char *End = "\n", size_t Units = 0); void PrintStats(const char *Where, const char *End = "\n", size_t Units = 0);
void PrintStatusForNewUnit(const Unit &U); void PrintStatusForNewUnit(const Unit &U);
void ShuffleCorpus(UnitVector *V); void ShuffleCorpus(UnitVector *V);
void TryDetectingAMemoryLeak(const uint8_t *Data, size_t Size,
bool DuringInitialCorpusExecution);
void AddToCorpus(const Unit &U); void AddToCorpus(const Unit &U);
void CheckExitOnSrcPosOrItem(); void CheckExitOnSrcPosOrItem();

View File

@ -11,6 +11,9 @@ RUN: not LLVMFuzzer-LeakTest -runs=0 -detect_leaks=1 %S 2>&1 | FileCheck %s --ch
LEAK_IN_CORPUS: ERROR: LeakSanitizer: detected memory leaks LEAK_IN_CORPUS: ERROR: LeakSanitizer: detected memory leaks
LEAK_IN_CORPUS: INFO: a leak has been found in the initial corpus. LEAK_IN_CORPUS: INFO: a leak has been found in the initial corpus.
RUN: not LLVMFuzzer-LeakTest -runs=100000000 %S/hi.txt 2>&1 | FileCheck %s --check-prefix=MULTI_RUN_LEAK
MULTI_RUN_LEAK-NOT: pulse
MULTI_RUN_LEAK: LeakSanitizer: detected memory leaks
RUN: not LLVMFuzzer-LeakTest -runs=100000 -detect_leaks=0 2>&1 | FileCheck %s --check-prefix=LEAK_AFTER RUN: not LLVMFuzzer-LeakTest -runs=100000 -detect_leaks=0 2>&1 | FileCheck %s --check-prefix=LEAK_AFTER
RUN: not LLVMFuzzer-LeakTest -runs=100000 2>&1 | FileCheck %s --check-prefix=LEAK_DURING RUN: not LLVMFuzzer-LeakTest -runs=100000 2>&1 | FileCheck %s --check-prefix=LEAK_DURING