From c5245aa9df486a39a4184e4de4dd6907a7090844 Mon Sep 17 00:00:00 2001 From: matt-kwong Date: Fri, 10 Feb 2017 17:07:39 -0800 Subject: [PATCH] Add gRPC to oss-fuzz projects (#373) --- projects/grpc/Dockerfile | 39 +++++++++++++++++++++++++ projects/grpc/build.sh | 60 ++++++++++++++++++++++++++++++++++++++ projects/grpc/project.yaml | 2 ++ 3 files changed, 101 insertions(+) create mode 100644 projects/grpc/Dockerfile create mode 100755 projects/grpc/build.sh create mode 100644 projects/grpc/project.yaml diff --git a/projects/grpc/Dockerfile b/projects/grpc/Dockerfile new file mode 100644 index 000000000..bf9eba4dc --- /dev/null +++ b/projects/grpc/Dockerfile @@ -0,0 +1,39 @@ +# Copyright 2016 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 ossfuzz/base-builder +MAINTAINER mattkwong@google.com + +RUN apt-get install -y software-properties-common python-software-properties +RUN add-apt-repository ppa:webupd8team/java +RUN apt-get update +RUN apt-get -y install \ + vim \ + build-essential \ + openjdk-8-jdk \ + make \ + curl \ + autoconf \ + libtool + +# Install Bazel +RUN echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list +RUN curl https://bazel.build/bazel-release.pub.gpg | apt-key add - +RUN apt-get update && apt-get install -y bazel + +RUN git clone --recursive https://github.com/grpc/grpc grpc +WORKDIR /src/grpc/ +COPY build.sh $SRC/ diff --git a/projects/grpc/build.sh b/projects/grpc/build.sh new file mode 100755 index 000000000..175fa3fed --- /dev/null +++ b/projects/grpc/build.sh @@ -0,0 +1,60 @@ +#!/bin/bash -eu +# Copyright 2016 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. +# +################################################################################ + +FUZZER_FILES="\ +test/core/end2end/fuzzers/api_fuzzer.c \ +test/core/json/fuzzer.c \ +test/core/client_channel/uri_fuzzer_test.c \ +test/core/http/request_fuzzer.c \ +test/core/http/response_fuzzer.c \ +test/core/nanopb/fuzzer_response.c \ +test/core/nanopb/fuzzer_serverlist.c \ +test/core/slice/percent_decode_fuzzer.c \ +test/core/slice/percent_encode_fuzzer.c \ +test/core/transport/chttp2/hpack_parser_fuzzer_test.c \ +test/core/end2end/fuzzers/client_fuzzer.c \ +test/core/end2end/fuzzers/server_fuzzer.c \ +test/core/security/ssl_server_fuzzer.c \ +" + +FUZZER_LIBRARIES="\ +bazel-bin/*.a \ +bazel-bin/test/core/util/*.a \ +bazel-bin/test/core/end2end/*.a \ +bazel-bin/external/submodule_boringssl/*.so \ +bazel-bin/external/submodule_zlib/_objs/z/external/submodule_zlib/*.o \ +bazel-bin/third_party/nanopb/*.so \ +bazel-bin/*.a \ +" + +# build project +bazel +BAZEL build --spawn_strategy=standalone --genrule_strategy=standalone :all test/... examples/cpp/... + +CFLAGS="${CFLAGS} -Iinclude -I." +CXXFLAGS="${CXXFLAGS} -Iinclude -I. -stdlib=libc++" + +for file in $FUZZER_FILES; do + fuzzer_name=$(basename $file .c) + fuzzer_object="${file::-1}o" + echo "Building fuzzer $fuzzer_name" + $CC $CFLAGS \ + $file -c -o $fuzzer_object + $CXX $CXXFLAGS \ + $fuzzer_object -o $OUT/$fuzzer_name \ + -lFuzzingEngine ${FUZZER_LIBRARIES} +done diff --git a/projects/grpc/project.yaml b/projects/grpc/project.yaml new file mode 100644 index 000000000..066e4a249 --- /dev/null +++ b/projects/grpc/project.yaml @@ -0,0 +1,2 @@ +homepage: "http://www.grpc.io/" +primary_contact: "mattkwong@google.com"