1
0
mirror of https://github.com/golang/go synced 2024-11-17 15:04:45 -07:00

os: handle relative symlinks starting with slash in Stat on windows

https://go-review.googlesource.com/c/39932/ handles relative symlinks.
But that change is incomplete.
We also have to handle relative symlinks starting with slash too.

Fixes #19937

Change-Id: I50dbccbaf270cb48a08fa57e5f450e5da18a7701
Reviewed-on: https://go-review.googlesource.com/40410
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Hiroshi Ioka 2017-04-12 05:34:36 +09:00 committed by Alex Brainman
parent 3692925c5e
commit 8a2cc22209
2 changed files with 22 additions and 2 deletions

View File

@ -1813,6 +1813,23 @@ func TestStatRelativeSymlink(t *testing.T) {
if !SameFile(st, st1) {
t.Error("Stat doesn't follow relative symlink")
}
if runtime.GOOS == "windows" {
Remove(link)
err = Symlink(target[len(filepath.VolumeName(target)):], link)
if err != nil {
t.Fatal(err)
}
st1, err := Stat(link)
if err != nil {
t.Fatal(err)
}
if !SameFile(st, st1) {
t.Error("Stat doesn't follow relative symlink")
}
}
}
func TestReadAtEOF(t *testing.T) {

View File

@ -75,9 +75,12 @@ func Stat(name string) (FileInfo, error) {
if err != nil {
return nil, err
}
if isAbs(newname) {
switch {
case isAbs(newname):
name = newname
} else {
case len(newname) > 0 && IsPathSeparator(newname[0]):
name = volumeName(name) + newname
default:
name = dirname(name) + `\` + newname
}
}