internal/sig/fuzz_test.go

96df83f2d3eb9f241bcaa53fcc243d090c53ab2b
gitbay/internal/sig/fuzz_test.go history · blame · raw

39 lines · 1324 bytes

 1package sig
 2
 3import "testing"
 4
 5// Every parser here eats bytes that arrive over the wire from whoever can
 6// push or register a key. None may panic on arbitrary input.
 7
 8func FuzzParseCommit(f *testing.F) {
 9	f.Add([]byte("tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\nauthor A <a@b> 1 +0000\ncommitter A <a@b> 1 +0000\n\nmsg\n"))
10	f.Add([]byte("tree x\ngpgsig -----BEGIN PGP SIGNATURE-----\n gibberish\n -----END PGP SIGNATURE-----\nauthor <>\n\n\n"))
11	f.Add([]byte("\x00\x01\x02"))
12	f.Add([]byte(""))
13	f.Fuzz(func(t *testing.T, raw []byte) {
14		ParseCommit(raw)
15	})
16}
17
18func FuzzDecodeArmorAndParseSSHSig(f *testing.F) {
19	f.Add([]byte("-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQ==\n-----END SSH SIGNATURE-----\n"))
20	f.Add([]byte("SSHSIG"))
21	f.Add([]byte("-----BEGIN SSH SIGNATURE-----\n-----END SSH SIGNATURE-----\n"))
22	f.Add([]byte(""))
23	f.Fuzz(func(t *testing.T, data []byte) {
24		if blob, err := decodeArmor(data, "SSH SIGNATURE"); err == nil {
25			parseSSHSig(blob)
26		}
27		// The raw blob path too: parseSSHSig on undecoded input.
28		parseSSHSig(data)
29	})
30}
31
32func FuzzParsePGPKey(f *testing.F) {
33	f.Add([]byte("-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQENBF==\n-----END PGP PUBLIC KEY BLOCK-----\n"))
34	f.Add([]byte(""))
35	f.Add([]byte("not a key"))
36	f.Fuzz(func(t *testing.T, armored []byte) {
37		ParsePGPKey(armored)
38	})
39}