From 7a141190cfea53305ab6893b2c59d3a9ac6fb15a Mon Sep 17 00:00:00 2001 From: Harish Mahendrakar Date: Wed, 14 Nov 2018 21:50:54 -0800 Subject: [PATCH] Add projects/libvpx (#1914) * libvpx: Add project Added projects/libvpx * libvpx: Use local ivf_read_frame ivf_read_frame inside libvpx results in lot of prints due to invalid frame size. This clutters output prints. * libvpx: Do not return error for incomplete frame read in read_frame * libvpx: Initialize threads using 32nd byte instead of 1st In most cases, the first byte in corpus of *.ivf files is 'D'. So using first byte results in same thread count in most cases. Using 32nd byte in the data (one of the bytes that signals size of the frame) will help in testing for different thread configurations. * libvpx: Updated configure options and removed redundant cflags Removed generic-gnu as target Added --disable-webm-io as that is not needed here Added --enable-debug to enable asserts Removed redundant cflags and cxxflags * libvpx: Removed threaded mode from build.sh vpx_dec_fuzzer.cc in libvpx now tests both single and multi-thread configurations using a single binary. * libvpx: Removed vpx_dec_fuzzer.cc and README.md Removed vpx_dec_fuzzer.cc and README.md from projects/libvpx vpx_dec_fuzzer.cc is now part of libvpx --- projects/libvpx/Dockerfile | 22 ++++++++++++ projects/libvpx/build.sh | 53 +++++++++++++++++++++++++++++ projects/libvpx/project.yaml | 9 +++++ projects/libvpx/vpx_dec_fuzzer.dict | 8 +++++ 4 files changed, 92 insertions(+) create mode 100644 projects/libvpx/Dockerfile create mode 100755 projects/libvpx/build.sh create mode 100644 projects/libvpx/project.yaml create mode 100644 projects/libvpx/vpx_dec_fuzzer.dict diff --git a/projects/libvpx/Dockerfile b/projects/libvpx/Dockerfile new file mode 100644 index 000000000..d022369b1 --- /dev/null +++ b/projects/libvpx/Dockerfile @@ -0,0 +1,22 @@ +# Copyright 2018 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 gcr.io/oss-fuzz-base/base-builder +MAINTAINER jzern@google.com +RUN apt-get update && apt-get install -y yasm wget gcc +RUN git clone https://chromium.googlesource.com/webm/libvpx +COPY build.sh vpx_dec_fuzzer.dict $SRC/ +WORKDIR libvpx diff --git a/projects/libvpx/build.sh b/projects/libvpx/build.sh new file mode 100755 index 000000000..1272262f9 --- /dev/null +++ b/projects/libvpx/build.sh @@ -0,0 +1,53 @@ +#!/bin/bash -eu +# Copyright 2018 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. +# +################################################################################ + +# Build libvpx +build_dir=$WORK/build +mkdir -p ${build_dir} +pushd ${build_dir} + +# Remove files generated by the previous build. +rm -rf ./* + +LDFLAGS="$CXXFLAGS" LD=$CC $SRC/libvpx/configure \ + --disable-unit-tests \ + --size-limit=12288x12288 \ + --extra-cflags="-DVPX_MAX_ALLOCABLE_MEMORY=1073741824" \ + --disable-webm-io \ + --enable-debug +make clean +make -j$(nproc) all +popd + +# build fuzzers +fuzzer_src_name=vpx_dec_fuzzer +fuzzer_decoders=( 'vp9' 'vp8' ) +for decoder in "${fuzzer_decoders[@]}"; do + fuzzer_name=${fuzzer_src_name}"_"${decoder} + + $CXX $CXXFLAGS -std=c++11 \ + -DDECODER=${decoder} \ + -I$SRC/libvpx \ + -I${build_dir} \ + -Wl,--start-group \ + -lFuzzingEngine \ + $SRC/libvpx/examples/${fuzzer_src_name}.cc -o $OUT/${fuzzer_name} \ + ${build_dir}/libvpx.a ${build_dir}/tools_common.c.o \ + -Wl,--end-group + + cp $SRC/vpx_dec_fuzzer.dict $OUT/${fuzzer_name}.dict +done diff --git a/projects/libvpx/project.yaml b/projects/libvpx/project.yaml new file mode 100644 index 000000000..39b92ef03 --- /dev/null +++ b/projects/libvpx/project.yaml @@ -0,0 +1,9 @@ +homepage: "https://www.webmproject.org" +primary_contact: "jzern@google.com" +sanitizers: +- address +- memory +- undefined +auto_ccs: +- jzern@google.com +- johannkoenig@google.com diff --git a/projects/libvpx/vpx_dec_fuzzer.dict b/projects/libvpx/vpx_dec_fuzzer.dict new file mode 100644 index 000000000..c6dc18077 --- /dev/null +++ b/projects/libvpx/vpx_dec_fuzzer.dict @@ -0,0 +1,8 @@ +# IVF Signature + version (bytes 0-5) +kw1="DKIF\x00\x00" + +# VP9 codec fourCC (bytes 8-11) +kw2="VP90" + +# VP8 codec fourCC (bytes 8-11) +kw3="VP80"