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(); + } + +}