[
https://issues.apache.org/jira/browse/WW-5370?focusedWorklogId=895131&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-895131
]
ASF GitHub Bot logged work on WW-5370:
--------------------------------------
Author: ASF GitHub Bot
Created on: 12/Dec/23 08:13
Start Date: 12/Dec/23 08:13
Worklog Time Spent: 10m
Work Description: kusalk commented on code in PR #807:
URL: https://github.com/apache/struts/pull/807#discussion_r1423587234
##########
core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java:
##########
@@ -29,25 +29,27 @@
import java.util.TreeSet;
@SuppressWarnings("unchecked")
-public class HttpParameters implements Map<String, Parameter>, Cloneable {
+public class HttpParameters implements Map<String, Parameter> {
final private Map<String, Parameter> parameters;
private HttpParameters(Map<String, Parameter> parameters) {
- this.parameters = parameters;
+ this.parameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ this.parameters.putAll(parameters);
}
+ @SuppressWarnings("rawtypes")
public static Builder create(Map requestParameterMap) {
return new Builder(requestParameterMap);
}
public static Builder create() {
- return new Builder(new HashMap<>());
+ return new Builder(new TreeMap<>(String.CASE_INSENSITIVE_ORDER));
}
public HttpParameters remove(Set<String> paramsToRemove) {
for (String paramName : paramsToRemove) {
- parameters.remove(paramName);
+ parameters.entrySet().removeIf(p ->
p.getKey().equalsIgnoreCase(paramName));
Review Comment:
Do we still need this custom comparison?
##########
core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java:
##########
@@ -73,7 +78,14 @@ private Map<String, String[]> toMap() {
return result;
}
+ /**
+ * Appends all the parameters by overriding any existing params in a
case-insensitive manner
+ *
+ * @param newParams A new params to append
+ * @return a current instance of {@link HttpParameters}
+ */
public HttpParameters appendAll(Map<String, Parameter> newParams) {
+ remove(newParams.keySet());
Review Comment:
Probably don't need this anymore either right?
##########
core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java:
##########
@@ -100,7 +112,7 @@ public boolean containsValue(Object value) {
@Override
public Parameter get(Object key) {
- if (parameters.containsKey(key)) {
+ if (key != null && contains(String.valueOf(key))) {
Review Comment:
Not sure this part makes sense, checking for the existence of String#valueOf
then retrieving using the object?
Do you mean something like this:
```
@Override
public Parameter get(Object key) {
if (key == null) {
return new Parameter.Empty("null");
}
Parameter val = parameters.get(key.toString());
return val != null ? val : new Parameter.Empty(key.toString());
}
```
Issue Time Tracking
-------------------
Worklog Id: (was: 895131)
Time Spent: 1h (was: 50m)
> Make HttpParameters case-insensitive
> ------------------------------------
>
> Key: WW-5370
> URL: https://issues.apache.org/jira/browse/WW-5370
> Project: Struts 2
> Issue Type: Improvement
> Components: Core
> Reporter: Lukasz Lenart
> Assignee: Lukasz Lenart
> Priority: Major
> Fix For: 6.4.0
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> Currently {{HttpParameters}} are case-sensitive which can be misleading
--
This message was sent by Atlassian Jira
(v8.20.10#820010)