package sig import "testing" // Every parser here eats bytes that arrive over the wire from whoever can // push or register a key. None may panic on arbitrary input. func FuzzParseCommit(f *testing.F) { f.Add([]byte("tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\nauthor A 1 +0000\ncommitter A 1 +0000\n\nmsg\n")) f.Add([]byte("tree x\ngpgsig -----BEGIN PGP SIGNATURE-----\n gibberish\n -----END PGP SIGNATURE-----\nauthor <>\n\n\n")) f.Add([]byte("\x00\x01\x02")) f.Add([]byte("")) f.Fuzz(func(t *testing.T, raw []byte) { ParseCommit(raw) }) } func FuzzDecodeArmorAndParseSSHSig(f *testing.F) { f.Add([]byte("-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQ==\n-----END SSH SIGNATURE-----\n")) f.Add([]byte("SSHSIG")) f.Add([]byte("-----BEGIN SSH SIGNATURE-----\n-----END SSH SIGNATURE-----\n")) f.Add([]byte("")) f.Fuzz(func(t *testing.T, data []byte) { if blob, err := decodeArmor(data, "SSH SIGNATURE"); err == nil { parseSSHSig(blob) } // The raw blob path too: parseSSHSig on undecoded input. parseSSHSig(data) }) } func FuzzParsePGPKey(f *testing.F) { f.Add([]byte("-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQENBF==\n-----END PGP PUBLIC KEY BLOCK-----\n")) f.Add([]byte("")) f.Add([]byte("not a key")) f.Fuzz(func(t *testing.T, armored []byte) { ParsePGPKey(armored) }) }