From e8d1b2f216230a320207a11d95fe67aa67385cf8 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Sat, 29 Aug 2026 18:05:44 +0200 Subject: [PATCH] armor,internal/format: restore CCTV fuzz seed corpora Reported by Joe Doyle of Trail of Bits. --- armor/armor_test.go | 13 +++++++++---- internal/format/format_test.go | 11 +++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/armor/armor_test.go b/armor/armor_test.go index bb51e48..6500d39 100644 --- a/armor/armor_test.go +++ b/armor/armor_test.go @@ -12,12 +12,12 @@ import ( "encoding/pem" "fmt" "io" + "io/fs" "log" - "os" - "path/filepath" "strings" "testing" + agetest "c2sp.org/CCTV/age" "filippo.io/age" "filippo.io/age/armor" "filippo.io/age/internal/format" @@ -134,12 +134,13 @@ func testArmor(t *testing.T, size int) { } func FuzzMalleability(f *testing.F) { - tests, err := filepath.Glob("../testdata/testkit/*") + tests, err := fs.ReadDir(agetest.Vectors, ".") if err != nil { f.Fatal(err) } + seeds := 0 for _, test := range tests { - contents, err := os.ReadFile(test) + contents, err := fs.ReadFile(agetest.Vectors, test.Name()) if err != nil { f.Fatal(err) } @@ -149,8 +150,12 @@ func FuzzMalleability(f *testing.F) { } if bytes.Contains(header, []byte("armored: yes")) { f.Add(contents) + seeds++ } } + if seeds == 0 { + f.Fatal("no armored test vectors") + } f.Fuzz(func(t *testing.T, data []byte) { r := armor.NewReader(bytes.NewReader(data)) content, err := io.ReadAll(r) diff --git a/internal/format/format_test.go b/internal/format/format_test.go index ff45afe..dc182a9 100644 --- a/internal/format/format_test.go +++ b/internal/format/format_test.go @@ -11,11 +11,11 @@ import ( "bytes" "errors" "io" - "os" - "path/filepath" + "io/fs" "strings" "testing" + agetest "c2sp.org/CCTV/age" "filippo.io/age/internal/format" ) @@ -159,12 +159,12 @@ func TestParseLimits(t *testing.T) { } func FuzzMalleability(f *testing.F) { - tests, err := filepath.Glob("../../testdata/testkit/*") + tests, err := fs.ReadDir(agetest.Vectors, ".") if err != nil { f.Fatal(err) } for _, test := range tests { - contents, err := os.ReadFile(test) + contents, err := fs.ReadFile(agetest.Vectors, test.Name()) if err != nil { f.Fatal(err) } @@ -174,6 +174,9 @@ func FuzzMalleability(f *testing.F) { } f.Add(contents) } + if len(tests) == 0 { + f.Fatal("no test vectors") + } f.Fuzz(func(t *testing.T, data []byte) { h, payload, err := format.Parse(bytes.NewReader(data)) if err != nil {