aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2012-02-21 22:50:00 -0800
committerRobert Griesemer <gri@golang.org>2012-02-21 22:50:00 -0800
commitd74680ea1cf3f1f52098eb293bd7198750f2193f (patch)
tree00928e8d9229e4534ebd6e6bb7c39cbbd9674309
parentc2cd0d09c2e784fb818aea47557269a3bac9d8b1 (diff)
downloadgo-d74680ea1cf3f1f52098eb293bd7198750f2193f.tar.gz
go-d74680ea1cf3f1f52098eb293bd7198750f2193f.zip
godoc: fix potential index out-of-bounds error
R=golang-dev, bradfitz, dsymonds CC=golang-dev https://golang.org/cl/5683072
-rw-r--r--src/cmd/godoc/mapping.go8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/cmd/godoc/mapping.go b/src/cmd/godoc/mapping.go
index 1a0da15bfc..544dd6f661 100644
--- a/src/cmd/godoc/mapping.go
+++ b/src/cmd/godoc/mapping.go
@@ -139,14 +139,16 @@ func (m *Mapping) Fprint(w io.Writer) {
}
}
+const sep = string(filepath.Separator)
+
// splitFirst splits a path at the first path separator and returns
// the path's head (the top-most directory specified by the path) and
// its tail (the rest of the path). If there is no path separator,
-// splitFirst returns path as head, and the the empty string as tail.
+// splitFirst returns path as head, and the empty string as tail.
// Specifically, splitFirst("foo") == splitFirst("foo/").
//
func splitFirst(path string) (head, tail string) {
- if i := strings.Index(path, string(filepath.Separator)); i > 0 {
+ if i := strings.Index(path, sep); i > 0 {
// 0 < i < len(path)
return path[0:i], path[i+1:]
}
@@ -179,7 +181,7 @@ func (m *Mapping) ToAbsolute(spath string) string {
func (m *Mapping) ToRelative(fpath string) string {
for _, e := range m.list {
// if fpath has prefix e.path, the next character must be a separator (was issue 3096)
- if strings.HasPrefix(fpath, e.path) && fpath[len(e.path)] == filepath.Separator {
+ if strings.HasPrefix(fpath, e.path+sep) {
spath := filepath.ToSlash(fpath)
// /absolute/prefix/foo -> prefix/foo
return path.Join(e.prefix, spath[len(e.path):]) // Join will remove a trailing '/'