mirror of
https://github.com/golang/go
synced 2024-11-26 16:26:49 -07:00
os: fix UserConfigDir and UserCacheDir don't check relative paths
This commit is contained in:
parent
959b3fd426
commit
c03f371a04
@ -472,8 +472,8 @@ func TempDir() string {
|
|||||||
// On Windows, it returns %LocalAppData%.
|
// On Windows, it returns %LocalAppData%.
|
||||||
// On Plan 9, it returns $home/lib/cache.
|
// On Plan 9, it returns $home/lib/cache.
|
||||||
//
|
//
|
||||||
// If the location cannot be determined (for example, $HOME is not defined),
|
// If the location cannot be determined (for example, $HOME is not defined) or
|
||||||
// then it will return an error.
|
// the path in $XDG_CACHE_HOME is relative, then it will return an error.
|
||||||
func UserCacheDir() (string, error) {
|
func UserCacheDir() (string, error) {
|
||||||
var dir string
|
var dir string
|
||||||
|
|
||||||
@ -506,6 +506,8 @@ func UserCacheDir() (string, error) {
|
|||||||
return "", errors.New("neither $XDG_CACHE_HOME nor $HOME are defined")
|
return "", errors.New("neither $XDG_CACHE_HOME nor $HOME are defined")
|
||||||
}
|
}
|
||||||
dir += "/.cache"
|
dir += "/.cache"
|
||||||
|
} else if !filepathlite.IsAbs(dir) {
|
||||||
|
return "", errors.New("path in $XDG_CACHE_HOME is relative")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,8 +525,8 @@ func UserCacheDir() (string, error) {
|
|||||||
// On Windows, it returns %AppData%.
|
// On Windows, it returns %AppData%.
|
||||||
// On Plan 9, it returns $home/lib.
|
// On Plan 9, it returns $home/lib.
|
||||||
//
|
//
|
||||||
// If the location cannot be determined (for example, $HOME is not defined),
|
// If the location cannot be determined (for example, $HOME is not defined) or
|
||||||
// then it will return an error.
|
// the path in $XDG_CONFIG_HOME is relative, then it will return an error.
|
||||||
func UserConfigDir() (string, error) {
|
func UserConfigDir() (string, error) {
|
||||||
var dir string
|
var dir string
|
||||||
|
|
||||||
@ -557,6 +559,8 @@ func UserConfigDir() (string, error) {
|
|||||||
return "", errors.New("neither $XDG_CONFIG_HOME nor $HOME are defined")
|
return "", errors.New("neither $XDG_CONFIG_HOME nor $HOME are defined")
|
||||||
}
|
}
|
||||||
dir += "/.config"
|
dir += "/.config"
|
||||||
|
} else if !filepathlite.IsAbs(dir) {
|
||||||
|
return "", errors.New("path in $XDG_CONFIG_HOME is relative")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2817,6 +2817,33 @@ func TestUserCacheDir(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserCacheDirXDGConfigDirEnvVar(t *testing.T) {
|
||||||
|
switch runtime.GOOS {
|
||||||
|
case "windows", "darwin", "plan9":
|
||||||
|
t.Skip("$XDG_CACHE_HOME is effective only on Unix systems")
|
||||||
|
}
|
||||||
|
|
||||||
|
wd, err := Getwd()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Setenv("XDG_CACHE_HOME", wd)
|
||||||
|
|
||||||
|
dir, err := UserCacheDir()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if dir != wd {
|
||||||
|
t.Fatalf("UserCacheDir returned %q; want the value of $XDG_CACHE_HOME %q", dir, wd)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Setenv("XDG_CACHE_HOME", "some-dir")
|
||||||
|
_, err = UserCacheDir()
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("UserCacheDir succeeded though $XDG_CACHE_HOME contains a relative path")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUserConfigDir(t *testing.T) {
|
func TestUserConfigDir(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
@ -2841,6 +2868,33 @@ func TestUserConfigDir(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserConfigDirXDGConfigDirEnvVar(t *testing.T) {
|
||||||
|
switch runtime.GOOS {
|
||||||
|
case "windows", "darwin", "plan9":
|
||||||
|
t.Skip("$XDG_CONFIG_HOME is effective only on Unix systems")
|
||||||
|
}
|
||||||
|
|
||||||
|
wd, err := Getwd()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Setenv("XDG_CONFIG_HOME", wd)
|
||||||
|
|
||||||
|
dir, err := UserConfigDir()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if dir != wd {
|
||||||
|
t.Fatalf("UserConfigDir returned %q; want the value of $XDG_CONFIG_HOME %q", dir, wd)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Setenv("XDG_CONFIG_HOME", "some-dir")
|
||||||
|
_, err = UserConfigDir()
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("UserConfigDir succeeded though $XDG_CONFIG_HOME contains a relative path")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUserHomeDir(t *testing.T) {
|
func TestUserHomeDir(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user