From f27a04e703d036d29dcac2dfc22a9762104fd42d Mon Sep 17 00:00:00 2001 From: AdamKorcz <44787359+AdamKorcz@users.noreply.github.com> Date: Wed, 17 May 2023 14:41:23 +0100 Subject: [PATCH] [protoc-gen-validate] initial integration (#10345) Signed-off-by: AdamKorcz --- projects/protoc-gen-validate/Dockerfile | 21 ++++++++++++ projects/protoc-gen-validate/build.sh | 24 +++++++++++++ projects/protoc-gen-validate/fuzz_test.go | 42 +++++++++++++++++++++++ projects/protoc-gen-validate/project.yaml | 9 +++++ 4 files changed, 96 insertions(+) create mode 100644 projects/protoc-gen-validate/Dockerfile create mode 100644 projects/protoc-gen-validate/build.sh create mode 100644 projects/protoc-gen-validate/fuzz_test.go create mode 100644 projects/protoc-gen-validate/project.yaml diff --git a/projects/protoc-gen-validate/Dockerfile b/projects/protoc-gen-validate/Dockerfile new file mode 100644 index 000000000..0b56282d0 --- /dev/null +++ b/projects/protoc-gen-validate/Dockerfile @@ -0,0 +1,21 @@ +# Copyright 2023 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-go +RUN apt-get update && apt-get install -y protobuf-compiler +RUN git clone --depth 1 https://github.com/bufbuild/protoc-gen-validate +WORKDIR $SRC/protoc-gen-validate +COPY build.sh fuzz_test.go $SRC/ diff --git a/projects/protoc-gen-validate/build.sh b/projects/protoc-gen-validate/build.sh new file mode 100644 index 000000000..be0ad7155 --- /dev/null +++ b/projects/protoc-gen-validate/build.sh @@ -0,0 +1,24 @@ +#!/bin/bash -eu +# Copyright 2023 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. +# +################################################################################ + +make build + +cp $SRC/fuzz_test.go ./validate +go mod tidy +printf "package validate\nimport _ \"github.com/AdamKorcz/go-118-fuzz-build/testing\"\n" > ./validate/register.go +go mod tidy +compile_native_go_fuzzer github.com/envoyproxy/protoc-gen-validate/validate FuzzTest FuzzTest diff --git a/projects/protoc-gen-validate/fuzz_test.go b/projects/protoc-gen-validate/fuzz_test.go new file mode 100644 index 000000000..d9ffbafd9 --- /dev/null +++ b/projects/protoc-gen-validate/fuzz_test.go @@ -0,0 +1,42 @@ +// Copyright 2023 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. +// + +package validate + +import ( + "testing" + + fuzz "github.com/AdaLogics/go-fuzz-headers" +) + +func FuzzTest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + ff := fuzz.NewConsumer(data) + x := &FloatRules{} + ff.GenerateStruct(x) + x.String() + x.ProtoReflect() + x.Descriptor() + x.GetConst() + x.GetLt() + x.GetLte() + x.GetGt() + x.GetGte() + x.GetIn() + x.GetNotIn() + x.GetIgnoreEmpty() + x.Reset() + }) +} diff --git a/projects/protoc-gen-validate/project.yaml b/projects/protoc-gen-validate/project.yaml new file mode 100644 index 000000000..437778467 --- /dev/null +++ b/projects/protoc-gen-validate/project.yaml @@ -0,0 +1,9 @@ +homepage: "https://github.com/bufbuild/protoc-gen-validate" +language: go +main_repo: "https://github.com/bufbuild/protoc-gen-validate" +auto_ccs: + - "adam@adalogics.com" +fuzzing_engines: + - libfuzzer +sanitizers: + - address