forked from catchorg/Catch2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
117 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,3 +29,4 @@ cmake-build-* | |
benchmark-dir | ||
.conan/test_package/build | ||
bazel-* | ||
build-fuzzers |
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,17 @@ | ||
# License: Boost 1.0 | ||
# By Paul Dreik 2020 | ||
|
||
# add a library that brings in the main() function from libfuzzer | ||
# and has all the dependencies, so the individual fuzzers can be | ||
# added one line each. | ||
add_library(fuzzhelper NullOStream.h NullOStream.cpp) | ||
target_link_libraries(fuzzhelper PUBLIC Catch2::Catch2) | ||
|
||
# This should be possible to set from the outside to be oss-fuzz compatible, | ||
# fix later. For now, target libFuzzer only. | ||
target_link_options(fuzzhelper PUBLIC "-fsanitize=fuzzer") | ||
|
||
foreach(fuzzer TestSpecParser XmlWriter) | ||
add_executable(fuzz_${fuzzer} fuzz_${fuzzer}.cpp) | ||
target_link_libraries(fuzz_${fuzzer} PRIVATE fuzzhelper) | ||
endforeach() |
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,10 @@ | ||
#include "NullOStream.h" | ||
|
||
void NullOStream::avoidOutOfLineVirtualCompilerWarning() | ||
{ | ||
} | ||
|
||
int NullStreambuf::overflow(int c){ | ||
setp(dummyBuffer, dummyBuffer + sizeof(dummyBuffer)); | ||
return (c == traits_type::eof()) ? '\0' : c; | ||
} |
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,20 @@ | ||
#pragma once | ||
|
||
#include <iostream> | ||
|
||
// from https://stackoverflow.com/a/8244052 | ||
class NullStreambuf : public std::streambuf { | ||
char dummyBuffer[64]; | ||
|
||
protected: | ||
virtual int overflow(int c) override final; | ||
}; | ||
|
||
class NullOStream final : private NullStreambuf, public std::ostream { | ||
public: | ||
NullOStream() : std::ostream(this) {} | ||
NullStreambuf *rdbuf() { return this; } | ||
virtual void avoidOutOfLineVirtualCompilerWarning(); | ||
}; | ||
|
||
|
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,33 @@ | ||
#!/bin/sh | ||
# | ||
# Builds the fuzzers | ||
# | ||
# By Paul Dreik 20200923 | ||
set -exu | ||
|
||
CATCHROOT=$(readlink -f $(dirname $0)/..) | ||
|
||
|
||
BUILDDIR=$CATCHROOT/build-fuzzers | ||
mkdir -p $BUILDDIR | ||
cd $BUILDDIR | ||
|
||
if which /usr/lib/ccache/clang++ >/dev/null 2>&1 ; then | ||
CXX=/usr/lib/ccache/clang++ | ||
else | ||
CXX=clang++ | ||
fi | ||
|
||
cmake $CATCHROOT \ | ||
-DCMAKE_CXX_COMPILER=$CXX \ | ||
-DCMAKE_CXX_FLAGS="-fsanitize=fuzzer-no-link,address,undefined -O3 -g" \ | ||
-DCATCH_DEVELOPMENT_BUILD=On \ | ||
-DCATCH_BUILD_EXAMPLES=Off \ | ||
-DCATCH_BUILD_EXTRA_TESTS=Off \ | ||
-DCATCH_BUILD_TESTING=Off \ | ||
-DBUILD_TESTING=Off \ | ||
-DCATCH_ENABLE_WERROR=Off \ | ||
-DCATCH_BUILD_FUZZERS=On | ||
|
||
cmake --build . -j $(nproc) | ||
|
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,16 @@ | ||
//License: Boost 1.0 | ||
//By Paul Dreik 2020 | ||
|
||
#include <catch2/internal/catch_test_spec_parser.hpp> | ||
#include <catch2/internal/catch_tag_alias_registry.hpp> | ||
|
||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { | ||
|
||
Catch::TagAliasRegistry tar; | ||
Catch::TestSpecParser tsp(tar); | ||
|
||
std::string buf(Data,Data+Size); | ||
tsp.parse(buf); | ||
|
||
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 |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//License: Boost 1.0 | ||
//By Paul Dreik 2020 | ||
|
||
#include <catch2/internal/catch_xmlwriter.hpp> | ||
|
||
#include "NullOStream.h" | ||
|
||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { | ||
|
||
std::string buf(Data,Data+Size); | ||
NullOStream nul; | ||
Catch::XmlEncode encode(buf); | ||
encode.encodeTo(nul); | ||
return 0; | ||
} | ||
|