diff --git a/internal/utils/path.go b/internal/utils/path.go index c17a7bc..5fffef9 100644 --- a/internal/utils/path.go +++ b/internal/utils/path.go @@ -9,6 +9,10 @@ func CleanPath(path string) string { result := []byte{'/'} isSlash := true for i := 0; i < l; i++ { + if path[i] == '?' { + result = append(result, path[i:]...) + break + } if path[i] == '\\' || path[i] == '/' { if !isSlash { isSlash = true @@ -21,4 +25,3 @@ func CleanPath(path string) string { } return string(result) } - diff --git a/internal/utils/path_test.go b/internal/utils/path_test.go index 6b6b8a5..f3fd35c 100644 --- a/internal/utils/path_test.go +++ b/internal/utils/path_test.go @@ -16,6 +16,11 @@ func TestCleanPath(t *testing.T) { a.IsTrue(CleanPath("/hello////world") == "/hello/world") } +func TestCleanPath_Args(t *testing.T) { + a := assert.NewAssertion(t) + a.IsTrue(CleanPath("/hello/world?base=///////") == "/hello/world?base=///////") +} + func BenchmarkCleanPath(b *testing.B) { for i := 0; i < b.N; i++ { _ = CleanPath("/hello///world/very/long/very//long")