aboutsummaryrefslogtreecommitdiffhomepage
path: root/projects/libvpx
diff options
context:
space:
mode:
authorGravatar Harish Mahendrakar <harish.mahendrakar@ittiam.com>2018-11-14 21:50:54 -0800
committerGravatar Oliver Chang <oliverchang@users.noreply.github.com>2018-11-15 16:50:54 +1100
commit7a141190cfea53305ab6893b2c59d3a9ac6fb15a (patch)
tree5685a38bc61223616533493e04f6d459a6ae6da0 /projects/libvpx
parent4b7c09e0379485bcaaa6070c8d58274048881588 (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/Dockerfile22
-rwxr-xr-xprojects/libvpx/build.sh53
-rw-r--r--projects/libvpx/project.yaml9
-rw-r--r--projects/libvpx/vpx_dec_fuzzer.dict8
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"