diff options
author | 2018-11-14 21:50:54 -0800 | |
---|---|---|
committer | 2018-11-15 16:50:54 +1100 | |
commit | 7a141190cfea53305ab6893b2c59d3a9ac6fb15a (patch) | |
tree | 5685a38bc61223616533493e04f6d459a6ae6da0 /projects/libvpx | |
parent | 4b7c09e0379485bcaaa6070c8d58274048881588 (diff) |
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
Diffstat (limited to 'projects/libvpx')
-rw-r--r-- | projects/libvpx/Dockerfile | 22 | ||||
-rwxr-xr-x | projects/libvpx/build.sh | 53 | ||||
-rw-r--r-- | projects/libvpx/project.yaml | 9 | ||||
-rw-r--r-- | projects/libvpx/vpx_dec_fuzzer.dict | 8 |
4 files changed, 92 insertions, 0 deletions
diff --git a/projects/libvpx/Dockerfile b/projects/libvpx/Dockerfile new file mode 100644 index 00000000..d022369b --- /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 00000000..1272262f --- /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 00000000..39b92ef0 --- /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 00000000..c6dc1807 --- /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" |