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:55 UTC

[struts] branch WW-5310-equal-sign created (now b97339e31)

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

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


      at b97339e31 WW-5310 Properly parses param value with equal sign

This branch includes the following new commits:

     new b97339e31 WW-5310 Properly parses param value with equal sign

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by lu...@apache.org.
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());