mirror of https://github.com/google/oss-fuzz.git
78 lines
3.0 KiB
Bash
Executable File
78 lines
3.0 KiB
Bash
Executable File
# Copyright 2020 Google Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
################################################################################
|
|
|
|
#!/bin/bash
|
|
|
|
# build libpng using the upstream-provided build.sh.
|
|
# it will also build the vanilla (non-proto) fuzz target,
|
|
# but we discard it.
|
|
(cd libpng/ && contrib/oss-fuzz/build.sh && rm -rf $OUT/*)
|
|
|
|
# Compile png_fuzz_proto.proto; should produce two files in genfiles/:
|
|
# png_fuzz_proto.pb.cc png_fuzz_proto.pb.h
|
|
rm -rf genfiles && mkdir genfiles && LPM/external.protobuf/bin/protoc png_fuzz_proto.proto --cpp_out=genfiles
|
|
|
|
# compile the upstream-provided vanilla fuzz target
|
|
# but replace LLVMFuzzerTestOneInput with FuzzPNG so that
|
|
# png_proto_fuzzer_example.cc can call FuzzPNG from its own
|
|
# LLVMFuzzerTestOneInput.
|
|
$CXX $CXXFLAGS -c -DLLVMFuzzerTestOneInput=FuzzPNG libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc -I libpng
|
|
|
|
# compile & link the rest
|
|
$CXX $CXXFLAGS png_proto_fuzzer_example.cc libpng_read_fuzzer.o genfiles/png_fuzz_proto.pb.cc \
|
|
-I genfiles -I. -I libprotobuf-mutator/ -I LPM/external.protobuf/include \
|
|
-lz \
|
|
LPM/src/libfuzzer/libprotobuf-mutator-libfuzzer.a \
|
|
LPM/src/libprotobuf-mutator.a \
|
|
LPM/external.protobuf/lib/libprotobuf.a \
|
|
libpng/.libs/libpng16.a \
|
|
$LIB_FUZZING_ENGINE \
|
|
-o $OUT/png_proto_fuzzer_example
|
|
|
|
# custom png proto mutator
|
|
$CXX $CXXFLAGS png_proto_fuzzer_example.cc png_proto_mutator.cc libpng_read_fuzzer.o genfiles/png_fuzz_proto.pb.cc \
|
|
-I genfiles -I. -I libprotobuf-mutator/ -I LPM/external.protobuf/include \
|
|
-lz \
|
|
LPM/src/libfuzzer/libprotobuf-mutator-libfuzzer.a \
|
|
LPM/src/libprotobuf-mutator.a \
|
|
LPM/external.protobuf/lib/libprotobuf.a \
|
|
libpng/.libs/libpng16.a \
|
|
$LIB_FUZZING_ENGINE \
|
|
-o $OUT/png_proto_fuzzer_example_custom_mutator
|
|
|
|
echo > dummy.cc
|
|
|
|
# A target, w/o protos but with a specialized custom mutator.
|
|
$CXX $CXXFLAGS -c libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc -I libpng
|
|
$CXX $CXXFLAGS dummy.cc \
|
|
-include fuzzer-test-suite/libpng-1.2.56/png_mutator.h \
|
|
-D PNG_MUTATOR_DEFINE_LIBFUZZER_CUSTOM_MUTATOR \
|
|
libpng_read_fuzzer.o \
|
|
-lz \
|
|
libpng/.libs/libpng16.a \
|
|
$LIB_FUZZING_ENGINE \
|
|
-o $OUT/png_custom_mutator_fuzzer_example
|
|
|
|
# An experimental out-of-tree target, with a specialized custom mutator.
|
|
$CXX $CXXFLAGS libpng_transforms_fuzzer.cc \
|
|
-include fuzzer-test-suite/libpng-1.2.56/png_mutator.h \
|
|
-D PNG_MUTATOR_DEFINE_LIBFUZZER_CUSTOM_MUTATOR \
|
|
-I libpng \
|
|
-lz \
|
|
libpng/.libs/libpng16.a \
|
|
$LIB_FUZZING_ENGINE \
|
|
-o $OUT/png_transforms_fuzzer
|