lib/file: fix MkdirAll after go1.21.4 stdlib update

In ths security related issue the go1.21.4 stdlib changed the parsing
of volume names on Windows.

https://github.com/golang/go/issues/63713

This had the consequences of breaking the MkdirAll tests which were
looking for specific error messages which changed and using invalid
paths.

In particular under go1.21.3:

    filepath.VolumeName(`\\?\C:`) == `\\?\C:`

But under go1.21.4 it is:

    filepath.VolumeName(`\\?\C:`) == `\\?`

The path `\\?\C:` isn't actually a valid Windows path. I reported this
as a FYI bug upstream - I'm not expecting it to be fixed.

See: https://github.com/golang/go/issues/64101
This commit is contained in:
Nick Craig-Wood
2023-11-13 15:19:22 +00:00
parent 831d1df67f
commit acf1e2df84
2 changed files with 7 additions and 6 deletions

View File

@ -53,7 +53,7 @@ func MkdirAll(path string, perm os.FileMode) error {
j--
}
if j > 1 {
if path[:j-1] != `\\?\UNC` {
if path[:j-1] != `\\?\UNC` && path[:j-1] != `\\?` {
// Create parent.
err = MkdirAll(path[:j-1], perm)
if err != nil {