Commit 9f59918c authored by Ian Lance Taylor's avatar Ian Lance Taylor

path/filepath: correct symlink eval for symlink at root

For a relative symlink in the root directory, such as /tmp ->
private/tmp, we were dropping the leading slash.

No test because we can't create a symlink in the root directory.
The test TestGZIPFilesHaveZeroMTimes was failing on the Darwin builders.

Updates #19922
Updates #20506

Change-Id: Ic83cb6d97ad0cb628fc551ac772a44fb3e20f038
Reviewed-on: https://go-review.googlesource.com/135295
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
parent 7c95703c
...@@ -41,14 +41,15 @@ func walkSymlinks(path string) (string, error) { ...@@ -41,14 +41,15 @@ func walkSymlinks(path string) (string, error) {
continue continue
} else if path[start:end] == ".." { } else if path[start:end] == ".." {
// Back up to previous component if possible. // Back up to previous component if possible.
// Note that volLen includes any leading slash.
var r int var r int
for r = len(dest) - 1; r >= 0; r-- { for r = len(dest) - 1; r >= volLen; r-- {
if os.IsPathSeparator(dest[r]) { if os.IsPathSeparator(dest[r]) {
break break
} }
} }
if r < 0 { if r < volLen {
if len(dest) > 0 { if len(dest) > volLen {
dest += string(os.PathSeparator) dest += string(os.PathSeparator)
} }
dest += ".." dest += ".."
...@@ -117,12 +118,12 @@ func walkSymlinks(path string) (string, error) { ...@@ -117,12 +118,12 @@ func walkSymlinks(path string) (string, error) {
// Symlink to relative path; replace last // Symlink to relative path; replace last
// path component in dest. // path component in dest.
var r int var r int
for r = len(dest) - 1; r >= 0; r-- { for r = len(dest) - 1; r >= volLen; r-- {
if os.IsPathSeparator(dest[r]) { if os.IsPathSeparator(dest[r]) {
break break
} }
} }
if r < 0 { if r < volLen {
dest = vol dest = vol
} else { } else {
dest = dest[:r] dest = dest[:r]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment