]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: fix potential index out-of-bounds error
authorRobert Griesemer <gri@golang.org>
Wed, 22 Feb 2012 06:50:00 +0000 (22:50 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 22 Feb 2012 06:50:00 +0000 (22:50 -0800)
R=golang-dev, bradfitz, dsymonds
CC=golang-dev
https://golang.org/cl/5683072

src/cmd/godoc/mapping.go

index 1a0da15bfcd7b8c91acca2f7c77e631124597c0b..544dd6f661d7d2cedd0f45f9557174c6e17b5479 100644 (file)
@@ -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 '/'