-
Notifications
You must be signed in to change notification settings - Fork 12.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[libFuzzer] Extend the fuzz target intarface to allow -1 return value.
With this change, fuzz targets may choose to return -1 to indicate that the input should not be added to the corpus regardless of the coverage it generated. Reviewed By: morehouse Differential Revision: https://reviews.llvm.org/D128749
- Loading branch information
Showing
6 changed files
with
77 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
|
||
// Tests how the fuzzer rejects inputs if the target returns -1. | ||
#include <cstddef> | ||
#include <cstdint> | ||
|
||
static volatile int Sink; | ||
|
||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { | ||
if (Size != 3) | ||
return -1; // Reject anyting that's not 3 bytes long. | ||
// Reject 'rej'. | ||
if (Data[0] == 'r' && Data[1] == 'e' && Data[2] == 'j') | ||
return -1; | ||
// Accept 'acc'. | ||
if (Data[0] == 'a' && Data[1] == 'c' && Data[2] == 'c') { | ||
Sink = 1; | ||
return 0; | ||
} | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
RUN: %cpp_compiler %S/NotinstrumentedTest.cpp -fsanitize-coverage=0 -o %t-NotinstrumentedTest-NoCoverage | ||
RUN: not %run %t-NotinstrumentedTest-NoCoverage 2>&1 | FileCheck %s --check-prefix=NO_COVERAGE | ||
RUN: %run %t-NotinstrumentedTest-NoCoverage -runs=100 2>&1 | FileCheck %s --check-prefix=NO_COVERAGE | ||
|
||
NO_COVERAGE: ERROR: no interesting inputs were found. Is the code instrumented for coverage? Exiting | ||
NO_COVERAGE: WARNING: no interesting inputs were found so far. Is the code instrumented for coverage? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Runs the Reject.cpp test, | ||
# ensures that the input 'acc' is present in the corpus, | ||
# and the input 'rej' is not. | ||
|
||
RUN: rm -rf %t-corpus && mkdir %t-corpus | ||
RUN: %cpp_compiler %S/Reject.cpp -o %t-Reject | ||
RUN: %run %t-Reject -runs=1000000 %t-corpus | ||
RUN: grep 'acc' %t-corpus/* | ||
RUN: not grep 'rej' %t-corpus/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters