aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar DavidKorczynski <david@adalogics.com>2022-07-12 10:06:46 +0100
committerGravatar GitHub <noreply@github.com>2022-07-12 10:06:46 +0100
commit2a96be863d4d9f9b626182dc1da3ad3718431e0e (patch)
tree5b7dab0f4b5f6d5f47acc19874d47c173c81bade
parentc73a3e897b7e187f1700b1a69ab94a05bc1f8ecb (diff)
g-api-py-api-common-protos: initial integration (#7949)
-rw-r--r--projects/g-api-py-api-common-protos/Dockerfile24
-rw-r--r--projects/g-api-py-api-common-protos/build.sh42
-rw-r--r--projects/g-api-py-api-common-protos/fuzz_api.py59
-rw-r--r--projects/g-api-py-api-common-protos/project.yaml9
4 files changed, 134 insertions, 0 deletions
diff --git a/projects/g-api-py-api-common-protos/Dockerfile b/projects/g-api-py-api-common-protos/Dockerfile
new file mode 100644
index 00000000..07849a54
--- /dev/null
+++ b/projects/g-api-py-api-common-protos/Dockerfile
@@ -0,0 +1,24 @@
+# Copyright 2022 Google LLC
+#
+# 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-python
+RUN apt-get update && apt-get install -y make autoconf automake libtool pkg-config
+RUN pip3 install --upgrade pip && pip3 install google-api-core
+RUN git clone --depth 1 --recursive https://github.com/protocolbuffers/protobuf.git
+RUN git clone --depth 1 https://github.com/googleapis/python-api-common-protos
+COPY build.sh fuzz_* $SRC/
+
+WORKDIR python-api-common-protos
diff --git a/projects/g-api-py-api-common-protos/build.sh b/projects/g-api-py-api-common-protos/build.sh
new file mode 100644
index 00000000..e183ef8a
--- /dev/null
+++ b/projects/g-api-py-api-common-protos/build.sh
@@ -0,0 +1,42 @@
+#!/bin/bash -eu
+# Copyright 2022 Google LLC
+#
+# 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 protoc with default options.
+unset CFLAGS CXXFLAGS
+mkdir $SRC/protobuf-install/
+cd $SRC/protobuf/
+./autogen.sh
+./configure --prefix=$SRC/protobuf-install
+make -j$(nproc)
+make install
+export PROTOC="$SRC/protobuf-install/bin/protoc"
+
+ldconfig
+cd python
+python3 setup.py build --cpp_implementation
+pip3 install .
+
+# Compile .proto specs
+cd $SRC/python-api-common-protos/
+for target in quota billing service routing log; do
+ $PROTOC --python_out=. --proto_path=. google/api/$target.proto
+done
+
+# Compile fuzzer
+for fuzzer in $(find $SRC -name 'fuzz_*.py'); do
+ compile_python_fuzzer $fuzzer
+done
diff --git a/projects/g-api-py-api-common-protos/fuzz_api.py b/projects/g-api-py-api-common-protos/fuzz_api.py
new file mode 100644
index 00000000..8955ea30
--- /dev/null
+++ b/projects/g-api-py-api-common-protos/fuzz_api.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python3
+# Copyright 2022 Google LLC
+#
+# 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.
+
+import sys
+import atheris
+
+with atheris.instrument_imports(enable_loader_override=False):
+ import google.api.quota_pb2
+ import google.api.billing_pb2
+ import google.api.service_pb2
+ import google.api.routing_pb2
+ import google.api.log_pb2
+ from google.protobuf.message import DecodeError, EncodeError
+
+
+@atheris.instrument_func
+def protobuf_roundtrip(proto_target, input_bytes):
+ try:
+ proto_target.ParseFromString(input_bytes)
+ except DecodeError:
+ None
+
+ try:
+ proto_target.SerializeToString()
+ except EncodeError:
+ None
+
+
+@atheris.instrument_func
+def TestOneInput(input_bytes):
+ """Test ParseFromString with bytes string"""
+
+ protobuf_roundtrip(google.api.quota_pb2.QuotaLimit(), input_bytes)
+ protobuf_roundtrip(google.api.billing_pb2.Billing(), input_bytes)
+ protobuf_roundtrip(google.api.service_pb2.Service(), input_bytes)
+ protobuf_roundtrip(google.api.routing_pb2.RoutingRule(), input_bytes)
+ protobuf_roundtrip(google.api.log_pb2.LogDescriptor(), input_bytes)
+
+
+def main():
+ atheris.instrument_all()
+ atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True)
+ atheris.Fuzz()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/projects/g-api-py-api-common-protos/project.yaml b/projects/g-api-py-api-common-protos/project.yaml
new file mode 100644
index 00000000..3ba4992c
--- /dev/null
+++ b/projects/g-api-py-api-common-protos/project.yaml
@@ -0,0 +1,9 @@
+fuzzing_engines:
+- libfuzzer
+homepage: https://github.com/googleapis/python-api-common-protos
+language: python
+main_repo: https://github.com/googleapis/python-api-common-protos
+sanitizers:
+- address
+vendor_ccs:
+- david@adalogics.com