godoc: fix out-of-bounds panic when serving top-level files
Change-Id: I0ba84bac0c97715c0bc66fdc4c33678341ef140c
Reviewed-on: https://go-review.googlesource.com/53151
Reviewed-by: Chris Broadfoot <cbro@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/godoc/godoc.go b/godoc/godoc.go
index 5c6d982..d6c27d0 100644
--- a/godoc/godoc.go
+++ b/godoc/godoc.go
@@ -461,17 +461,14 @@
return "pkg/" + path
}
-// srcToPkgLinkFunc builds an <a> tag linking to
-// the package documentation of relpath.
+// srcToPkgLinkFunc builds an <a> tag linking to the package
+// documentation of relpath.
func srcToPkgLinkFunc(relpath string) string {
relpath = pkgLinkFunc(relpath)
- if relpath == "pkg/" {
+ relpath = pathpkg.Dir(relpath)
+ if relpath == "pkg" {
return `<a href="/pkg">Index</a>`
}
- if i := strings.LastIndex(relpath, "/"); i != -1 {
- // Remove filename after last slash.
- relpath = relpath[:i]
- }
return fmt.Sprintf(`<a href="/%s">%s</a>`, relpath, relpath[len("pkg/"):])
}
diff --git a/godoc/godoc_test.go b/godoc/godoc_test.go
index dca1c95..c1d631c 100644
--- a/godoc/godoc_test.go
+++ b/godoc/godoc_test.go
@@ -313,6 +313,8 @@
}{
{"src/", `<a href="/pkg">Index</a>`},
{"src/fmt/", `<a href="/pkg/fmt">fmt</a>`},
+ {"pkg/", `<a href="/pkg">Index</a>`},
+ {"pkg/LICENSE", `<a href="/pkg">Index</a>`},
} {
if got := srcToPkgLinkFunc(tc.path); got != tc.want {
t.Errorf("srcToPkgLinkFunc(%v) = %v; want %v", tc.path, got, tc.want)