Fuzzing: Add archive fuzzer

Signed-off-by: AdamKorcz <adam@adalogics.com>
This commit is contained in:
AdamKorcz
2021-07-22 16:22:01 +01:00
parent a137b64f50
commit 2556aac675
9 changed files with 655 additions and 4 deletions

View File

@@ -0,0 +1,52 @@
// +build gofuzz
/*
Copyright The containerd Authors.
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 fuzz
import (
"bytes"
"context"
"io/ioutil"
"os"
fuzz "github.com/AdaLogics/go-fuzz-headers"
"github.com/containerd/containerd/archive"
)
// FuzzApply implements a fuzzer that applies
// a fuzzed tar archive on a directory
func FuzzApply(data []byte) int {
f := fuzz.NewConsumer(data)
iters, err := f.GetInt()
if err != nil {
return 0
}
maxIters := 20
tmpDir, err := ioutil.TempDir("", "prefix-test")
if err != nil {
return 0
}
defer os.RemoveAll(tmpDir)
for i := 0; i < iters%maxIters; i++ {
rBytes, err := f.TarBytes()
if err != nil {
return 0
}
r := bytes.NewReader(rBytes)
_, _ = archive.Apply(context.Background(), tmpDir, r)
}
return 1
}

View File

@@ -17,9 +17,10 @@
cd "$(dirname "${BASH_SOURCE[0]}")"
cd ../../
compile_go_fuzzer github.com/containerd/containerd/contrib/fuzz FuzzFiltersParse fuzz_filters_parse
compile_go_fuzzer github.com/containerd/containerd/contrib/fuzz FuzzPlatformsParse fuzz_platforms_parse
# Don't move docker_fuzzer.go back into contrib/fuzz
mv contrib/fuzz/docker_fuzzer.go remotes/docker/
compile_go_fuzzer github.com/containerd/containerd/remotes/docker FuzzFetcher fuzz_fetcher
mv remotes/docker/docker_fuzzer.go contrib/fuzz/
compile_go_fuzzer github.com/containerd/containerd/contrib/fuzz FuzzFiltersParse fuzz_filters_parse
compile_go_fuzzer github.com/containerd/containerd/contrib/fuzz FuzzPlatformsParse fuzz_platforms_parse
compile_go_fuzzer github.com/containerd/containerd/contrib/fuzz FuzzApply fuzz_apply