Skip to content

Commit 545a1bd

Browse files
committed
Don't double encoding URL paths. Fixes #10025
1 parent 011e5d5 commit 545a1bd

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed

grails-test-suite-web/src/test/groovy/org/grails/web/mapping/DoubleWildcardUrlMappingTests.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ class DoubleWildCardController {
7171
UrlMappingInfo info = infos[0]
7272
info.configure webRequest
7373
assertEquals 'wrong controller name', 'someOther', info.getControllerName()
74+
75+
76+
infos = holder.matchAll('/someOther/1+2')
77+
assert infos
78+
79+
info = infos[0]
80+
info.configure webRequest
81+
assertEquals 'wrong controller name', 'someOther', info.getControllerName()
82+
assertEquals 'wrong controller name', '1+2', info.getActionName()
83+
7484
}
7585

7686
void testDoubleWildcardInParam() {

grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/AbstractUrlMappingInfo.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,7 @@
2020

2121
import java.io.UnsupportedEncodingException;
2222
import java.net.URLDecoder;
23-
import java.util.Collection;
24-
import java.util.Collections;
25-
import java.util.Comparator;
26-
import java.util.LinkedHashMap;
27-
import java.util.List;
28-
import java.util.Map;
23+
import java.util.*;
2924

3025
import grails.util.GrailsStringUtils;
3126
import org.grails.web.servlet.mvc.GrailsWebRequest;
@@ -49,7 +44,7 @@ public Map<String, Object> getParams() {
4944

5045
public void setParams(final Map newParams) {
5146
Collection keys = newParams.keySet();
52-
keys = DefaultGroovyMethods.toList(keys);
47+
keys = new ArrayList(keys);
5348
Collections.sort((List) keys, new Comparator() {
5449
public int compare(Object leftKey, Object rightKey) {
5550
Object leftValue = newParams.get(leftKey);
@@ -90,13 +85,8 @@ protected void populateParamsForMapping(GrailsWebRequest webRequest) {
9085
if (param instanceof Closure) {
9186
param = evaluateNameForValue(param);
9287
}
93-
if (param instanceof String) {
94-
try {
95-
param = URLDecoder.decode((String) param, encoding);
96-
}
97-
catch (UnsupportedEncodingException e) {
98-
param = evaluateNameForValue(param);
99-
}
88+
if (param instanceof CharSequence) {
89+
param = param.toString();
10090
}
10191
dispatchParams.put(name, param);
10292
}

grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/mvc/UrlMappingsHandlerMapping.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,9 @@ class UrlMappingsHandlerMapping extends AbstractHandlerMapping {
170170
request.setAttribute(MATCHED_REQUEST, info)
171171
return info
172172
}
173-
else if(info.viewName || info.URI) return info
173+
else if(info.viewName || info.URI) {
174+
return info
175+
}
174176
}
175177
}
176178

0 commit comments

Comments
 (0)