@@ -185,16 +185,52 @@ func TestRouteRedirectTrailingSlash(t *testing.T) {
185
185
w = PerformRequest (router , http .MethodGet , "/path2/" , header {Key : "X-Forwarded-Prefix" , Value : "/api/" })
186
186
assert .Equal (t , 200 , w .Code )
187
187
188
- w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "../../bug#?" })
189
- assert .Equal (t , "../../../bug%2523%253F/path" , w .Header ().Get ("Location" ))
188
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "../../api#?" })
189
+ assert .Equal (t , "/api/path" , w .Header ().Get ("Location" ))
190
+ assert .Equal (t , 301 , w .Code )
191
+
192
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "../../api" })
193
+ assert .Equal (t , "/api/path" , w .Header ().Get ("Location" ))
194
+ assert .Equal (t , 301 , w .Code )
195
+
196
+ w = PerformRequest (router , http .MethodGet , "/path2" , header {Key : "X-Forwarded-Prefix" , Value : "../../api" })
197
+ assert .Equal (t , "/api/path2/" , w .Header ().Get ("Location" ))
198
+ assert .Equal (t , 301 , w .Code )
199
+
200
+ w = PerformRequest (router , http .MethodGet , "/path2" , header {Key : "X-Forwarded-Prefix" , Value : "/../../api" })
201
+ assert .Equal (t , "/api/path2/" , w .Header ().Get ("Location" ))
202
+ assert .Equal (t , 301 , w .Code )
203
+
204
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "api/../../" })
205
+ assert .Equal (t , "//path" , w .Header ().Get ("Location" ))
206
+ assert .Equal (t , 301 , w .Code )
207
+
208
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "api/../../../" })
209
+ assert .Equal (t , "/path" , w .Header ().Get ("Location" ))
210
+ assert .Equal (t , 301 , w .Code )
211
+
212
+ w = PerformRequest (router , http .MethodGet , "/path2" , header {Key : "X-Forwarded-Prefix" , Value : "../../gin-gonic.com" })
213
+ assert .Equal (t , "/gin-goniccom/path2/" , w .Header ().Get ("Location" ))
214
+ assert .Equal (t , 301 , w .Code )
215
+
216
+ w = PerformRequest (router , http .MethodGet , "/path2" , header {Key : "X-Forwarded-Prefix" , Value : "/../../gin-gonic.com" })
217
+ assert .Equal (t , "/gin-goniccom/path2/" , w .Header ().Get ("Location" ))
190
218
assert .Equal (t , 301 , w .Code )
191
219
192
220
w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "https://gin-gonic.com/#" })
193
- assert .Equal (t , "https%3A/gin-gonic.com/%23/https%253A/gin-gonic.com/%2523/path" , w .Header ().Get ("Location" ))
221
+ assert .Equal (t , "https/gin-goniccom/https/gin-goniccom/path" , w .Header ().Get ("Location" ))
222
+ assert .Equal (t , 301 , w .Code )
223
+
224
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "#api" })
225
+ assert .Equal (t , "api/api/path" , w .Header ().Get ("Location" ))
226
+ assert .Equal (t , 301 , w .Code )
227
+
228
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "/nor-mal/#?a=1" })
229
+ assert .Equal (t , "/nor-mal/a1/path" , w .Header ().Get ("Location" ))
194
230
assert .Equal (t , 301 , w .Code )
195
231
196
- w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "#bug " })
197
- assert .Equal (t , "%23bug/%2523bug /path" , w .Header ().Get ("Location" ))
232
+ w = PerformRequest (router , http .MethodGet , "/path/" , header {Key : "X-Forwarded-Prefix" , Value : "/nor-mal/%2e%2e/ " })
233
+ assert .Equal (t , "/nor-mal/2e2e /path" , w .Header ().Get ("Location" ))
198
234
assert .Equal (t , 301 , w .Code )
199
235
200
236
router .RedirectTrailingSlash = false
0 commit comments