aboutsummaryrefslogtreecommitdiff
path: root/src/path
diff options
context:
space:
mode:
authorAman Gupta <aman@tmm1.net>2020-09-04 16:07:12 -0700
committerAlex Brainman <alex.brainman@gmail.com>2021-03-25 08:43:17 +0000
commit402d784b8fc0a7914955eb168ea288338e2025ff (patch)
tree431deea8f75957ef78182a11d787b63888dba2a8 /src/path
parentdec3d00b28657ce9e2fe725c858a46c3dd3fd594 (diff)
downloadgo-402d784b8fc0a7914955eb168ea288338e2025ff.tar.gz
go-402d784b8fc0a7914955eb168ea288338e2025ff.zip
path/filepath: make Rel handle Windows UNC share
Fixes #41230 Change-Id: Iea15e4ae6d56328333fd22de5d78dfcad78ef1bc Reviewed-on: https://go-review.googlesource.com/c/go/+/253197 Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Emmanuel Odeke <emmanuel@orijtech.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/path')
-rw-r--r--src/path/filepath/path.go4
-rw-r--r--src/path/filepath/path_test.go1
2 files changed, 5 insertions, 0 deletions
diff --git a/src/path/filepath/path.go b/src/path/filepath/path.go
index 2e7b439355..28b30b1ae7 100644
--- a/src/path/filepath/path.go
+++ b/src/path/filepath/path.go
@@ -275,7 +275,11 @@ func Rel(basepath, targpath string) (string, error) {
targ = targ[len(targVol):]
if base == "." {
base = ""
+ } else if base == "" && volumeNameLen(baseVol) > 2 /* isUNC */ {
+ // Treat any targetpath matching `\\host\share` basepath as absolute path.
+ base = string(Separator)
}
+
// Can't use IsAbs - `\a` and `a` are both relative in Windows.
baseSlashed := len(base) > 0 && base[0] == Separator
targSlashed := len(targ) > 0 && targ[0] == Separator
diff --git a/src/path/filepath/path_test.go b/src/path/filepath/path_test.go
index 8616256ac0..1d9889d320 100644
--- a/src/path/filepath/path_test.go
+++ b/src/path/filepath/path_test.go
@@ -1227,6 +1227,7 @@ var winreltests = []RelTests{
{`C:\Projects`, `c:\projects\src`, `src`},
{`C:\Projects`, `c:\projects`, `.`},
{`C:\Projects\a\..`, `c:\projects`, `.`},
+ {`\\host\share`, `\\host\share\file.txt`, `file.txt`},
}
func TestRel(t *testing.T) {