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
This commit is contained in:
Harish Mahendrakar 2018-11-14 21:50:54 -08:00 committed by Oliver Chang
parent 4b7c09e037
commit 7a141190cf
4 changed files with 92 additions and 0 deletions

View File

@ -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

53
projects/libvpx/build.sh Executable file
View File

@ -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

View File

@ -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

View File

@ -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"