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

lukaszlenart pushed a commit to branch WW-4692-encoder-decoder
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/WW-4692-encoder-decoder by 
this push:
     new d399d3220 WW-4692 Removes code smells reported by Sonar and adds 
additional test case
d399d3220 is described below

commit d399d3220c5507a27f5b22ff42075e50dfe864cf
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Wed Oct 26 10:38:20 2022 +0200

    WW-4692 Removes code smells reported by Sonar and adds additional test case
---
 .../org/apache/struts2/url/StrutsUrlDecoder.java   |  2 +-
 .../struts2/views/util/DefaultUrlHelper.java       |  8 +--
 .../apache/struts2/url/StrutsUrlEncoderTest.java   | 60 ++++++++++++++++++++++
 3 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/core/src/main/java/org/apache/struts2/url/StrutsUrlDecoder.java 
b/core/src/main/java/org/apache/struts2/url/StrutsUrlDecoder.java
index 752055154..f3ae7d0c4 100644
--- a/core/src/main/java/org/apache/struts2/url/StrutsUrlDecoder.java
+++ b/core/src/main/java/org/apache/struts2/url/StrutsUrlDecoder.java
@@ -83,7 +83,7 @@ public class StrutsUrlDecoder implements UrlDecoder {
                 if (ix + 2 > len) {
                     throw new IllegalArgumentException("The % character must 
be followed by two hexademical digits");
                 }
-                b = (byte) ((convertHexDigit(bytes[ix++]) << 4) + 
convertHexDigit(bytes[ix++]));
+                b = (byte) ((convertHexDigit(bytes[ix++]) << 4) + 
convertHexDigit(bytes[ix++]) & 0xff );
             }
             bytes[ox++] = b;
         }
diff --git 
a/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java 
b/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
index d888ecfea..9f383c611 100644
--- a/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
+++ b/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
@@ -251,8 +251,8 @@ public class DefaultUrlHelper implements UrlHelper {
     }
 
     private String buildParameterSubstring(String name, String value, boolean 
encode) {
-        String encodedName = encode ? encode(name) : name;
-        String encodedValue = encode ? encode(value) : value;
+        String encodedName = encode ? encoder.encode(name) : name;
+        String encodedValue = encode ? encoder.encode(value) : value;
         return encodedName + '=' + encodedValue;
     }
 
@@ -309,8 +309,8 @@ public class DefaultUrlHelper implements UrlHelper {
                         paramValue = tmpParams[1];
                     }
                     if (paramName != null) {
-                        paramName = decode(paramName, true);
-                        String translatedParamValue = decode(paramValue, true);
+                        paramName = decoder.decode(paramName, true);
+                        String translatedParamValue = 
decoder.decode(paramValue, true);
 
                         if (queryParams.containsKey(paramName) || 
forceValueArray) {
                             // WW-1619 append new param value to existing 
value(s)
diff --git 
a/core/src/test/java/org/apache/struts2/url/StrutsUrlEncoderTest.java 
b/core/src/test/java/org/apache/struts2/url/StrutsUrlEncoderTest.java
new file mode 100644
index 000000000..9ca04f0e3
--- /dev/null
+++ b/core/src/test/java/org/apache/struts2/url/StrutsUrlEncoderTest.java
@@ -0,0 +1,60 @@
+package org.apache.struts2.url;
+
+import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class StrutsUrlEncoderTest {
+
+    private StrutsUrlEncoder encoder;
+
+    @Test
+    public void testEncodeValidIso88591Start() {
+        String result = encoder.encode("%xxxx", "ISO-8859-1");
+        assertEquals("%25xxxx", result);
+    }
+
+    @Test
+    public void testEncodeValidIso88591Middle() {
+        String result = encoder.encode("xx%xx", "ISO-8859-1");
+        assertEquals("xx%25xx", result);
+    }
+
+    @Test
+    public void testEncodeValidIso88591End() {
+        String result = encoder.encode("xxxx%", "ISO-8859-1");
+        assertEquals("xxxx%25", result);
+    }
+
+    @Test
+    public void testEncodeValidUtf8Start() {
+        String result = encoder.encode("\u00eaxxxx", "UTF-8");
+        assertEquals("%C3%AAxxxx", result);
+    }
+
+    @Test
+    public void testEncodeValidUtf8Middle() {
+        String result = encoder.encode("xx\u00eaxx", "UTF-8");
+        assertEquals("xx%C3%AAxx", result);
+    }
+
+    @Test
+    public void testEncodeValidUtf8End() {
+        String result = encoder.encode("xxxx\u00ea", "UTF-8");
+        assertEquals("xxxx%C3%AA", result);
+    }
+
+    @Test
+    public void testEncodePlusCharAsSpace() {
+        String result = encoder.encode("a b", "UTF-8");
+        assertEquals("a+b", result);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        this.encoder = new StrutsUrlEncoder();
+    }
+
+}

Reply via email to