internal/sig/fuzz_test.go
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}