mirror of https://github.com/portainer/portainer
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
4.9 KiB
121 lines
4.9 KiB
3 years ago
|
package filesystem
|
||
|
|
||
|
import "testing"
|
||
|
|
||
|
func TestJoinPaths(t *testing.T) {
|
||
|
var ts = []struct {
|
||
|
trusted string
|
||
|
untrusted string
|
||
|
expected string
|
||
|
}{
|
||
|
{"", "", "."},
|
||
|
{"", ".", "."},
|
||
|
{"", "d/e/f", `d\e\f`},
|
||
|
{"", "./d/e/f", `d\e\f`},
|
||
|
{"", "../d/e/f", `d\e\f`},
|
||
|
{"", "/d/e/f", `d\e\f`},
|
||
|
{"", "../../../windows/system.ini", `windows\system.ini`},
|
||
|
{"", `C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{"", `..\..\..\..\C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{"", `\\server\a\b\c`, `server\a\b\c`},
|
||
|
{"", `..\..\..\..\\server\a\b\c`, `server\a\b\c`},
|
||
|
|
||
|
{".", "", "."},
|
||
|
{".", ".", "."},
|
||
|
{".", "d/e/f", `d\e\f`},
|
||
|
{".", "./d/e/f", `d\e\f`},
|
||
|
{".", "../d/e/f", `d\e\f`},
|
||
|
{".", "/d/e/f", `d\e\f`},
|
||
|
{".", "../../../windows/system.ini", `windows\system.ini`},
|
||
|
{".", `C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{".", `..\..\..\..\C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{".", `\\server\a\b\c`, `server\a\b\c`},
|
||
|
{".", `..\..\..\..\\server\a\b\c`, `server\a\b\c`},
|
||
|
|
||
|
{"./", "", "."},
|
||
|
{"./", ".", "."},
|
||
|
{"./", "d/e/f", `d\e\f`},
|
||
|
{"./", "./d/e/f", `d\e\f`},
|
||
|
{"./", "../d/e/f", `d\e\f`},
|
||
|
{"./", "/d/e/f", `d\e\f`},
|
||
|
{"./", "../../../windows/system.ini", `windows\system.ini`},
|
||
|
{"./", `C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{"./", `..\..\..\..\C:\windows\system.ini`, `windows\system.ini`},
|
||
|
{"./", `\\server\a\b\c`, `server\a\b\c`},
|
||
|
{"./", `..\..\..\..\\server\a\b\c`, `server\a\b\c`},
|
||
|
|
||
|
{"a/b/c", "", `a\b\c`},
|
||
|
{"a/b/c", ".", `a\b\c`},
|
||
|
{"a/b/c", "d/e/f", `a\b\c\d\e\f`},
|
||
|
{"a/b/c", "./d/e/f", `a\b\c\d\e\f`},
|
||
|
{"a/b/c", "../d/e/f", `a\b\c\d\e\f`},
|
||
|
{"a/b/c", "../../../windows/system.ini", `a\b\c\windows\system.ini`},
|
||
|
{"a/b/c", `C:\windows\system.ini`, `a\b\c\C:\windows\system.ini`},
|
||
|
{"a/b/c", `..\..\..\..\C:\windows\system.ini`, `a\b\c\C:\windows\system.ini`},
|
||
|
{"a/b/c", `\\server\a\b\c`, `a\b\c\server\a\b\c`},
|
||
|
{"a/b/c", `..\..\..\..\\server\a\b\c`, `a\b\c\server\a\b\c`},
|
||
|
|
||
|
{"/a/b/c", "", `\a\b\c`},
|
||
|
{"/a/b/c", ".", `\a\b\c`},
|
||
|
{"/a/b/c", "d/e/f", `\a\b\c\d\e\f`},
|
||
|
{"/a/b/c", "./d/e/f", `\a\b\c\d\e\f`},
|
||
|
{"/a/b/c", "../d/e/f", `\a\b\c\d\e\f`},
|
||
|
{"/a/b/c", "../../../windows/system.ini", `\a\b\c\windows\system.ini`},
|
||
|
{"/a/b/c", `C:\windows\system.ini`, `\a\b\c\C:\windows\system.ini`},
|
||
|
{"/a/b/c", `..\..\..\..\C:\windows\system.ini`, `\a\b\c\C:\windows\system.ini`},
|
||
|
{"/a/b/c", `\\server\a\b\c`, `\a\b\c\server\a\b\c`},
|
||
|
{"/a/b/c", `..\..\..\..\\server\a\b\c`, `\a\b\c\server\a\b\c`},
|
||
|
|
||
|
{"./a/b/c", "", `a\b\c`},
|
||
|
{"./a/b/c", ".", `a\b\c`},
|
||
|
{"./a/b/c", "d/e/f", `a\b\c\d\e\f`},
|
||
|
{"./a/b/c", "./d/e/f", `a\b\c\d\e\f`},
|
||
|
{"./a/b/c", "../d/e/f", `a\b\c\d\e\f`},
|
||
|
{"./a/b/c", "../../../windows/system.ini", `a\b\c\windows\system.ini`},
|
||
|
{"./a/b/c", `C:\windows\system.ini`, `a\b\c\C:\windows\system.ini`},
|
||
|
{"./a/b/c", `..\..\..\..\C:\windows\system.ini`, `a\b\c\C:\windows\system.ini`},
|
||
|
{"./a/b/c", `\\server\a\b\c`, `a\b\c\server\a\b\c`},
|
||
|
{"./a/b/c", `..\..\..\..\\server\a\b\c`, `a\b\c\server\a\b\c`},
|
||
|
|
||
|
{"../a/b/c", "", `..\a\b\c`},
|
||
|
{"../a/b/c", ".", `..\a\b\c`},
|
||
|
{"../a/b/c", "d/e/f", `..\a\b\c\d\e\f`},
|
||
|
{"../a/b/c", "./d/e/f", `..\a\b\c\d\e\f`},
|
||
|
{"../a/b/c", "../d/e/f", `..\a\b\c\d\e\f`},
|
||
|
{"../a/b/c", "../../../windows/system.ini", `..\a\b\c\windows\system.ini`},
|
||
|
{"../a/b/c", `C:\windows\system.ini`, `..\a\b\c\C:\windows\system.ini`},
|
||
|
{"../a/b/c", `..\..\..\..\C:\windows\system.ini`, `..\a\b\c\C:\windows\system.ini`},
|
||
|
{"../a/b/c", `\\server\a\b\c`, `..\a\b\c\server\a\b\c`},
|
||
|
{"../a/b/c", `..\..\..\..\\server\a\b\c`, `..\a\b\c\server\a\b\c`},
|
||
|
|
||
|
{"C:/a/b/c", "", `C:\a\b\c`},
|
||
|
{"C:/a/b/c", ".", `C:\a\b\c`},
|
||
|
{"C:/a/b/c", "d/e/f", `C:\a\b\c\d\e\f`},
|
||
|
{"C:/a/b/c", "./d/e/f", `C:\a\b\c\d\e\f`},
|
||
|
{"C:/a/b/c", "../d/e/f", `C:\a\b\c\d\e\f`},
|
||
|
{"C:/a/b/c", "../../../windows/system.ini", `C:\a\b\c\windows\system.ini`},
|
||
|
{"C:/a/b/c", `C:\windows\system.ini`, `C:\a\b\c\C:\windows\system.ini`},
|
||
|
{"C:/a/b/c", `..\..\..\..\C:\windows\system.ini`, `C:\a\b\c\C:\windows\system.ini`},
|
||
|
{"C:/a/b/c", `\\server\a\b\c`, `C:\a\b\c\server\a\b\c`},
|
||
|
{"C:/a/b/c", `..\..\..\..\\server\a\b\c`, `C:\a\b\c\server\a\b\c`},
|
||
|
|
||
|
{`\\server\a\b\c`, "", `\\server\a\b\c`},
|
||
|
{`\\server\a\b\c`, ".", `\\server\a\b\c`},
|
||
|
{`\\server\a\b\c`, "d/e/f", `\\server\a\b\c\d\e\f`},
|
||
|
{`\\server\a\b\c`, "./d/e/f", `\\server\a\b\c\d\e\f`},
|
||
|
{`\\server\a\b\c`, "../d/e/f", `\\server\a\b\c\d\e\f`},
|
||
|
{`\\server\a\b\c`, "../../../windows/system.ini", `\\server\a\b\c\windows\system.ini`},
|
||
|
{`\\server\a\b\c`, `C:\windows\system.ini`, `\\server\a\b\c\C:\windows\system.ini`},
|
||
|
{`\\server\a\b\c`, `..\..\..\C:\windows\system.ini`, `\\server\a\b\c\C:\windows\system.ini`},
|
||
|
{`\\server\a\b\c`, `\\server\a\b\c`, `\\server\a\b\c\server\a\b\c`},
|
||
|
{`\\server\a\b\c`, `..\..\..\\server\a\b\c`, `\\server\a\b\c\server\a\b\c`},
|
||
|
}
|
||
|
|
||
|
for _, c := range ts {
|
||
|
r := JoinPaths(c.trusted, c.untrusted)
|
||
|
if r != c.expected {
|
||
|
t.Fatalf("expected '%s', got '%s'. Inputs = '%s', '%s'", c.expected, r, c.trusted, c.untrusted)
|
||
|
}
|
||
|
}
|
||
|
}
|