From 4f7bb44386617c022c990b2718675dc716e6db48 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 20 Jun 2022 01:18:48 +0100 Subject: [PATCH] internal/format: add malleability fuzz test --- internal/format/format_test.go | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/internal/format/format_test.go b/internal/format/format_test.go index 4f3b11a..a7e227c 100644 --- a/internal/format/format_test.go +++ b/internal/format/format_test.go @@ -6,6 +6,9 @@ package format_test import ( "bytes" + "io" + "os" + "path/filepath" "testing" "filippo.io/age/internal/format" @@ -37,3 +40,39 @@ func TestStanzaMarshal(t *testing.T) { t.Errorf("wrong 64 columns stanza encoding: expected %q, got %q", exp, buf.String()) } } + +func FuzzMalleability(f *testing.F) { + tests, err := filepath.Glob("../../testdata/testkit/*") + if err != nil { + f.Fatal(err) + } + for _, test := range tests { + contents, err := os.ReadFile(test) + if err != nil { + f.Fatal(err) + } + f.Add(contents) + } + f.Fuzz(func(t *testing.T, data []byte) { + h, payload, err := format.Parse(bytes.NewReader(data)) + if err != nil { + if h != nil { + t.Error("h != nil on error") + } + if payload != nil { + t.Error("payload != nil on error") + } + t.Skip() + } + w := &bytes.Buffer{} + if err := h.Marshal(w); err != nil { + t.Fatal(err) + } + if _, err := io.Copy(w, payload); err != nil { + t.Fatal(err) + } + if !bytes.Equal(w.Bytes(), data) { + t.Error("Marshal output different from input") + } + }) +}