]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.21] path/filepath: fix various issues in parsing Windows paths
authorDamien Neil <dneil@google.com>
Fri, 1 Sep 2023 18:17:19 +0000 (11:17 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 7 Nov 2023 16:36:54 +0000 (16:36 +0000)
commit9e933c189ca3a84f12995b3c799364a06abc4376
treedd48fe2f69dad744a233ed58dad7e81f72718099
parent434af8537ea73f66f0d2b5a29806516b4b6207ab
[release-branch.go1.21] path/filepath: fix various issues in parsing Windows paths

On Windows, A root local device path is a path which begins with
\\?\ or \??\.  A root local device path accesses the DosDevices
object directory, and permits access to any file or device on the
system. For example \??\C:\foo is equivalent to common C:\foo.

The Clean, IsAbs, IsLocal, and VolumeName functions did not
recognize root local device paths beginning with \??\.

Clean could convert a rooted path such as \a\..\??\b into
the root local device path \??\b. It will now convert this
path into .\??\b.

IsAbs now correctly reports paths beginning with \??\
as absolute.

IsLocal now correctly reports paths beginning with \??\
as non-local.

VolumeName now reports the \??\ prefix as a volume name.

Join(`\`, `??`, `b`) could convert a seemingly innocent
sequence of path elements into the root local device path
\??\b. It will now convert this to \.\??\b.

In addition, the IsLocal function did not correctly
detect reserved names in some cases:

  - reserved names followed by spaces, such as "COM1 ".
  - "COM" or "LPT" followed by a superscript 1, 2, or 3.

IsLocal now correctly reports these names as non-local.

For #63713
Fixes #63715
Fixes CVE-2023-45283
Fixes CVE-2023-45284

Change-Id: I446674a58977adfa54de7267d716ac23ab496c54
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2040691
Reviewed-by: Roland Shoemaker <bracewell@google.com>
Reviewed-by: Tatiana Bradley <tatianabradley@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2072596
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/540276
Auto-Submit: Heschi Kreinick <heschi@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
src/go/build/deps_test.go
src/internal/safefilepath/path_windows.go
src/path/filepath/path.go
src/path/filepath/path_nonwindows.go [new file with mode: 0644]
src/path/filepath/path_test.go
src/path/filepath/path_windows.go