Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

path/filepath: Split on a path with more than 1 separator at the start doesn't work on Windows #33225

Open
Blackmage89 opened this issue Jul 22, 2019 · 1 comment
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone

Comments

@Blackmage89
Copy link

What version of Go are you using (go version)?

$ go version
go version go1.11.4 windows/amd64

Does this issue reproduce with the latest release?

I don't have a working installation of it at the moment.

What operating system and processor architecture are you using (go env)?

go env Output
$ go env

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\vittorio.parrella\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=c:\GOPATH\trunk\ETS2
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\VITTOR~1.PAR\AppData\Local\Temp\2\go-build213636594=/tmp/go-build -gno-record-gcc-switches

What did you do?

import (
   "fmt"
   "path"
   "path/filepath"
)

func main() {
	dir,file := filepath.Split(`C:\test\test.jpg`)
	fmt.Println("path: ", dir, " - file: ", file)

        // this is the problematic scenario
        // seems that if there is more than separator at the start, the split does not work
	dir,file = filepath.Split(`\\test/test.jpg`)
	fmt.Println("path: ", dir, " - file: ", file)
	dir,file = filepath.Split(`\test/test.jpg`)
	fmt.Println("path: ", dir, " - file: ", file)

	dir,file = filepath.Split(`//test/test.jpg`)
	fmt.Println("path: ", dir, " - file: ", file)

       // in fact, using path.Clean eliminates the problem
	dir,file = filepath.Split(path.Clean(`//test/test.jpg`))
	fmt.Println("path: ", dir, " - file: ", file)
}

What did you expect to see?

path:  C:\test\  - file:  test.jpg
path:  \\test/  - file:  test.jpg
path:  \test/  - file:  test.jpg
path:  ////test/  - file:  test.jpg
path:  /test/  - file:  test.jpg

What did you see instead?

path:  C:\test\  - file:  test.jpg
path:  \\test/test.jpg  - file:  
path:  \test/  - file:  test.jpg
path:  //test/  - file:  test.jpg
path:  /test/  - file:  test.jpg

Note:
On linux it seems that the issue does not manifest, the output is as expected (minus the absolute windows path which is ok): https://play.golang.org/p/9PlmyANLFAL

@Blackmage89
Copy link
Author

Blackmage89 commented Jul 22, 2019

Just checked again and i wrongly said that path.Clean works around the issue on the last scenario, it does not using "\\test/test.jpg", the result is the same as without path.Clean

@ALTree ALTree changed the title filepath.Split issue on Windows filepath: Split issue on Windows Jul 24, 2019
@ALTree ALTree added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Jul 24, 2019
@ALTree ALTree added this to the Go1.14 milestone Jul 24, 2019
@odeke-em odeke-em changed the title filepath: Split issue on Windows path/filepath: Split on a path with more than 1 separator at the start doesn't work on Windows Oct 7, 2019
@rsc rsc modified the milestones: Go1.14, Backlog Oct 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

3 participants