sumdb/tlog: fuzz tests for parsers

Future fuzz tests could test round trip properties

Change-Id: If195b82998ebedaeca68a7723c2558369e68f716
GitHub-Last-Rev: 6fff4e678380610ecb5f34e494cec04a9a462f62
GitHub-Pull-Request: golang/mod#18
Reviewed-on: https://go-review.googlesource.com/c/mod/+/470155
Run-TryBot: Matthew Hickford <hickford@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Hickford <hickford@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
diff --git a/sumdb/tlog/note_test.go b/sumdb/tlog/note_test.go
index a32d6d2..3373a0c 100644
--- a/sumdb/tlog/note_test.go
+++ b/sumdb/tlog/note_test.go
@@ -115,3 +115,19 @@
 		}
 	}
 }
+
+// FuzzParseTree tests that ParseTree never crashes
+func FuzzParseTree(f *testing.F) {
+	f.Add([]byte("go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n"))
+	f.Fuzz(func(t *testing.T, text []byte) {
+		ParseTree(text)
+	})
+}
+
+// FuzzParseRecord tests that ParseRecord never crashes
+func FuzzParseRecord(f *testing.F) {
+	f.Add([]byte("12345\nhello\n\n"))
+	f.Fuzz(func(t *testing.T, msg []byte) {
+		ParseRecord(msg)
+	})
+}
diff --git a/sumdb/tlog/tile_test.go b/sumdb/tlog/tile_test.go
new file mode 100644
index 0000000..e451a63
--- /dev/null
+++ b/sumdb/tlog/tile_test.go
@@ -0,0 +1,24 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package tlog
+
+import (
+	"testing"
+)
+
+// FuzzParseTilePath tests that ParseTilePath never crashes
+func FuzzParseTilePath(f *testing.F) {
+	f.Add("tile/4/0/001")
+	f.Add("tile/4/0/001.p/5")
+	f.Add("tile/3/5/x123/x456/078")
+	f.Add("tile/3/5/x123/x456/078.p/2")
+	f.Add("tile/1/0/x003/x057/500")
+	f.Add("tile/3/5/123/456/078")
+	f.Add("tile/3/-1/123/456/078")
+	f.Add("tile/1/data/x003/x057/500")
+	f.Fuzz(func(t *testing.T, path string) {
+		ParseTilePath(path)
+	})
+}