# Copyright 2019 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 jsha@letsencrypt.org
RUN apt-get update
RUN apt-get install -y make libtool libssl-dev libexpat-dev wget
RUN git clone --depth=1 https://github.com/NLnetLabs/unbound unbound
WORKDIR unbound
COPY parse_packet_fuzzer.c .
COPY fuzz_1.c .
COPY fuzz_2.c .
COPY fuzz_3.c .
COPY fuzz_4.c .
COPY build.sh $SRC/
