]> Cypherpunks repositories - gostls13.git/commitdiff
os: improve Windows fixLongPath
authorKir Kolyshkin <kolyshkin@gmail.com>
Wed, 21 Aug 2024 22:11:38 +0000 (15:11 -0700)
committerDamien Neil <dneil@google.com>
Thu, 22 Aug 2024 20:04:04 +0000 (20:04 +0000)
CL 574695 added caching the os.Chdir argument for Windows, and used the
cached value to assess the length of the current working directory in
addExtendedPrefix (used by fixLongPath).

It did not take into account that Chdir can accept relative paths, and
thus the pathLength calculation in addExtendedPrefix can be wrong.

Let's only cache the os.Chdir argument if it's absolute, and clean the
cache otherwise, thus improving the correctness of fixLongPath.

For #41734
For #21782
For #36375

Change-Id: Ie24a5ed763a7aacc310666d2e4cbb8e298768670
Reviewed-on: https://go-review.googlesource.com/c/go/+/607437
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Damien Neil <dneil@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/os/file.go

index b8cf89ce765ae51ef047277add322af86e88c97d..48bc4101f660325a311d9c77030da4a5bba1e194 100644 (file)
@@ -344,8 +344,13 @@ func Chdir(dir string) error {
                return &PathError{Op: "chdir", Path: dir, Err: e}
        }
        if runtime.GOOS == "windows" {
+               abs := filepathlite.IsAbs(dir)
                getwdCache.Lock()
-               getwdCache.dir = dir
+               if abs {
+                       getwdCache.dir = dir
+               } else {
+                       getwdCache.dir = ""
+               }
                getwdCache.Unlock()
        }
        if log := testlog.Logger(); log != nil {