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"