You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2023/05/24 05:12:56 UTC

[struts] 01/01: WW-5310 Properly parses param value with equal sign

This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5310-equal-sign
in repository https://gitbox.apache.org/repos/asf/struts.git

commit b97339e31e8aab08a773d35f0c3d29ed106953f9
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Wed May 24 07:06:15 2023 +0200

    WW-5310 Properly parses param value with equal sign
---
 .../struts2/url/StrutsQueryStringParser.java       | 19 +++++++--------
 .../struts2/url/StrutsQueryStringParserTest.java   | 27 ++++++++++++++++++++++
 2 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java b/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
index f1764511e..3b3ec80eb 100644
--- a/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
+++ b/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
@@ -55,19 +55,16 @@ public class StrutsQueryStringParser implements QueryStringParser {
                 LOG.debug("Param [{}] is blank, skipping", param);
                 continue;
             }
-
-            String[] tmpParams = param.split("=");
-            String paramName = null;
+            String paramName;
             String paramValue = "";
-            if (tmpParams.length > 0) {
-                paramName = tmpParams[0];
-            }
-            if (tmpParams.length > 1) {
-                paramValue = tmpParams[1];
-            }
-            if (paramName != null) {
-                extractParam(paramName, paramValue, queryParams, forceValueArray);
+            int index = param.indexOf("=");
+            if (index > -1) {
+                paramName = param.substring(0, index);
+                paramValue = param.substring(index + 1);
+            } else {
+                paramName = param;
             }
+            extractParam(paramName, paramValue, queryParams, forceValueArray);
         }
         return queryParams;
     }
diff --git a/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java b/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
index 001749edf..ab0622cd5 100644
--- a/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
+++ b/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
@@ -76,6 +76,33 @@ public class StrutsQueryStringParserTest {
         assertEquals("value with space", queryParameters.get("name"));
     }
 
+    @Test
+    public void shouldProperlySplitParamsWithDoubleEqualSign() {
+        Map<String, Object> queryParameters = parser.parse("id1=n123=&id2=n3456", false);
+
+        assertTrue(queryParameters.containsKey("id1"));
+        assertTrue(queryParameters.containsKey("id2"));
+        assertEquals("n123=", queryParameters.get("id1"));
+        assertEquals("n3456", queryParameters.get("id2"));
+    }
+
+    @Test
+    public void shouldHandleParamWithNoValue1() {
+        Map<String, Object> queryParameters = parser.parse("paramNoValue", false);
+
+        assertTrue(queryParameters.containsKey("paramNoValue"));
+        assertEquals("", queryParameters.get("paramNoValue"));
+    }
+
+    @Test
+    public void shouldHandleParamWithNoValue2() {
+        Map<String, Object> queryParameters = parser.parse("paramNoValue&param1=1234", false);
+
+        assertTrue(queryParameters.containsKey("paramNoValue"));
+        assertTrue(queryParameters.containsKey("param1"));
+        assertEquals("1234", queryParameters.get("param1"));
+    }
+
     @Before
     public void setUp() throws Exception {
         this.parser = new StrutsQueryStringParser(new StrutsUrlDecoder());