mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-05 01:45:22 +02:00
fix: use correct input for strip slashes middleware (#7295)
- The router must use the escaped path in order to ensure correct functionality (at least, that is what they say). However `req.URL.Path` shouldn't be set to the escaped path, which is fixed in this patch. - Simplify the logic and no longer try to use `rctx.RoutePath`, this is only useful if the middleware was placed after some routing parsing was done. - Resolves forgejo/forgejo#7294 - Resolves forgejo/forgejo#7292 - Add unit test Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7295 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
parent
2d54cbc8fd
commit
cff284fdc3
3 changed files with 35 additions and 23 deletions
|
@ -15,9 +15,10 @@ import (
|
|||
|
||||
func TestStripSlashesMiddleware(t *testing.T) {
|
||||
type test struct {
|
||||
name string
|
||||
expectedPath string
|
||||
inputPath string
|
||||
name string
|
||||
expectedPath string
|
||||
expectedNormalPath string
|
||||
inputPath string
|
||||
}
|
||||
|
||||
tests := []test{
|
||||
|
@ -57,9 +58,16 @@ func TestStripSlashesMiddleware(t *testing.T) {
|
|||
expectedPath: "/repo/migrate",
|
||||
},
|
||||
{
|
||||
name: "path with encoded slash",
|
||||
inputPath: "/user2/%2F%2Frepo1",
|
||||
expectedPath: "/user2/%2F%2Frepo1",
|
||||
name: "path with encoded slash",
|
||||
inputPath: "/user2/%2F%2Frepo1",
|
||||
expectedPath: "/user2/%2F%2Frepo1",
|
||||
expectedNormalPath: "/user2/repo1",
|
||||
},
|
||||
{
|
||||
name: "path with space",
|
||||
inputPath: "/assets/css/theme%20cappuccino.css",
|
||||
expectedPath: "/assets/css/theme%20cappuccino.css",
|
||||
expectedNormalPath: "/assets/css/theme cappuccino.css",
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -69,7 +77,11 @@ func TestStripSlashesMiddleware(t *testing.T) {
|
|||
|
||||
called := false
|
||||
r.Get("*", func(w http.ResponseWriter, r *http.Request) {
|
||||
assert.Equal(t, tt.expectedPath, r.URL.Path)
|
||||
if tt.expectedNormalPath != "" {
|
||||
assert.Equal(t, tt.expectedNormalPath, r.URL.Path)
|
||||
} else {
|
||||
assert.Equal(t, tt.expectedPath, r.URL.Path)
|
||||
}
|
||||
|
||||
rctx := chi.RouteContext(r.Context())
|
||||
assert.Equal(t, tt.expectedPath, rctx.RoutePath)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue