Fix fixed path redirects with raw paths

This commit is contained in:
Puneet Dixit 2026-05-23 15:18:17 +05:30
parent 5f4f964325
commit 9395c62314
2 changed files with 19 additions and 0 deletions

1
gin.go
View File

@ -811,6 +811,7 @@ func redirectFixedPath(c *Context, root *node, trailingSlash bool) bool {
if fixedPath, ok := root.findCaseInsensitivePath(cleanPath(rPath), trailingSlash); ok {
req.URL.Path = bytesconv.BytesToString(fixedPath)
req.URL.RawPath = ""
redirectRequest(c)
return true
}

View File

@ -273,6 +273,24 @@ func TestRouteRedirectFixedPath(t *testing.T) {
assert.Equal(t, http.StatusTemporaryRedirect, w.Code)
}
func TestRouteRedirectFixedPathWithRawPath(t *testing.T) {
router := New()
router.RedirectFixedPath = true
router.RedirectTrailingSlash = false
router.UseRawPath = true
router.UnescapePathValues = false
router.GET("/あ", func(c *Context) {})
w := PerformRequest(router, http.MethodGet, "/%e3%81%82")
assert.Equal(t, "/%E3%81%82", w.Header().Get("Location"))
assert.Equal(t, http.StatusMovedPermanently, w.Code)
w = PerformRequest(router, http.MethodGet, "/%E3%81%82")
assert.Empty(t, w.Header().Get("Location"))
assert.Equal(t, http.StatusOK, w.Code)
}
// TestContextParamsGet tests that a parameter can be parsed from the URL.
func TestRouteParamsByName(t *testing.T) {
name := ""