From 54437b90157beea59678f6cc66bce35ba118ffa4 Mon Sep 17 00:00:00 2001 From: Max Moroz Date: Wed, 12 Oct 2016 19:35:32 +0200 Subject: [PATCH] Add convert_woff2ttf_fuzzer fuzzer for woff2. --- woff2/Dockerfile | 21 ++++++++++++++ woff2/Jenkinsfile | 23 +++++++++++++++ woff2/build.sh | 41 +++++++++++++++++++++++++++ woff2/convert_woff2ttf_fuzzer.cc | 17 +++++++++++ woff2/convert_woff2ttf_fuzzer.options | 2 ++ 5 files changed, 104 insertions(+) create mode 100644 woff2/Dockerfile create mode 100644 woff2/Jenkinsfile create mode 100755 woff2/build.sh create mode 100644 woff2/convert_woff2ttf_fuzzer.cc create mode 100644 woff2/convert_woff2ttf_fuzzer.options diff --git a/woff2/Dockerfile b/woff2/Dockerfile new file mode 100644 index 000000000..24a2b0805 --- /dev/null +++ b/woff2/Dockerfile @@ -0,0 +1,21 @@ +# Copyright 2016 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. +# +################################################################################ + +FROM ossfuzz/base-libfuzzer +MAINTAINER mmoroz@chromium.org +RUN apt-get install -y make autoconf automake libtool + +COPY build.sh /src/ diff --git a/woff2/Jenkinsfile b/woff2/Jenkinsfile new file mode 100644 index 000000000..114765ff4 --- /dev/null +++ b/woff2/Jenkinsfile @@ -0,0 +1,23 @@ +// Copyright 2016 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. +// +//////////////////////////////////////////////////////////////////////////////// + +def libfuzzerBuild = fileLoader.fromGit('infra/libfuzzer-pipeline.groovy', + 'https://github.com/google/oss-fuzz.git', + 'master', null, '') + +libfuzzerBuild { + git = "https://github.com/google/woff2" +} diff --git a/woff2/build.sh b/woff2/build.sh new file mode 100755 index 000000000..2fa2d982c --- /dev/null +++ b/woff2/build.sh @@ -0,0 +1,41 @@ +#!/bin/bash -eu +# Copyright 2016 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. +# +################################################################################ + +cd /src/woff2 + +# Build the library. Actually there is no 'library' target, so we use .o files. +# '-no-canonical-prefixes' flag makes clang crazy. Need to avoid it. +cat brotli/shared.mk | sed -e "s/-no-canonical-prefixes//" \ +> brotli/shared.mk.temp +mv brotli/shared.mk.temp brotli/shared.mk + +cat Makefile | sed -e "s/-no-canonical-prefixes//" \ +> Makefile.temp +mv Makefile.temp Makefile + +# woff2 uses LFLAGS instead of LDFLAGS. +export LFLAGS=$LDFLAGS +make CC="$CC $CFLAGS" CXX="$CXX $CXXFLAGS" clean all + +# To avoid multiple main() definitions. +rm src/woff2_compress.o src/woff2_decompress.o + +# Build the fuzzer. +fuzzer=convert_woff2ttf_fuzzer +$CXX $CXXFLAGS -std=c++11 -Isrc \ + /src/oss-fuzz/woff2/$fuzzer.cc -o /out/$fuzzer \ + /work/libfuzzer/*.o src/*.o brotli/dec/*.o brotli/enc/*.o $LDFLAGS diff --git a/woff2/convert_woff2ttf_fuzzer.cc b/woff2/convert_woff2ttf_fuzzer.cc new file mode 100644 index 000000000..1c81e32e1 --- /dev/null +++ b/woff2/convert_woff2ttf_fuzzer.cc @@ -0,0 +1,17 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include +#include + +#include "woff2_dec.h" + +// Entry point for LibFuzzer. +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + std::string buf; + woff2::WOFF2StringOut out(&buf); + out.SetMaxSize(30 * 1024 * 1024); + woff2::ConvertWOFF2ToTTF(data, size, &out); + return 0; +} diff --git a/woff2/convert_woff2ttf_fuzzer.options b/woff2/convert_woff2ttf_fuzzer.options new file mode 100644 index 000000000..e5ae71b93 --- /dev/null +++ b/woff2/convert_woff2ttf_fuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 1000000