cmd/gitmirror: prevent a panic and log on bogus ref line in parseRefs
Updates golang/go#29560
Change-Id: I397b38af3dc421b5de6e6a799ad6b0e5ccab62f3
Reviewed-on: https://go-review.googlesource.com/c/156341
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/gitmirror/gitmirror.go b/cmd/gitmirror/gitmirror.go
index 901e60e..f9d75af 100644
--- a/cmd/gitmirror/gitmirror.go
+++ b/cmd/gitmirror/gitmirror.go
@@ -1529,8 +1529,15 @@
if err := cmd.Start(); err != nil {
return nil, err
}
+ var line int
for bs.Scan() {
+ line++
f := strings.Fields(bs.Text())
+ if len(f) < 2 {
+ log.Printf("WARNING: skipping bogus ref line %d, %q (report this to https://golang.org/issue/29560)", line, bs.Text())
+ log.Printf(" refHash so far: %d entries, %s\n", condTrunc(fmt.Sprintf("%q", refHash), 500))
+ continue
+ }
refHash[f[1]] = f[0]
}
if err := bs.Err(); err != nil {
@@ -1571,3 +1578,10 @@
fmt.Fprintf(w, "%s\n", kv)
}
}
+
+func condTrunc(s string, n int) string {
+ if len(s) <= n {
+ return s
+ }
+ return s[:n] + "...(truncated)"
+}