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

adelbene pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 1ec7cf9eca9c6ed4082d30677ec455cd930215c6
Author: Pedro Santos <[email protected]>
AuthorDate: Sat Oct 26 00:54:31 2024 -0300

    WICKET-7024 decode PackageResourceReference URL attributes only inside 
requests for it
---
 .../resource/PackageResourceReferenceTest.java     | 72 ++++++++++++++++++++++
 .../apache/wicket/core/request/resource/a_blue.css |  3 +
 .../wicket/core/request/resource/a_orange.css      |  3 +
 .../request/resource/PackageResourceReference.java |  4 +-
 4 files changed, 81 insertions(+), 1 deletion(-)

diff --git 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
index bf8cd88398..14a1b2a205 100644
--- 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
+++ 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
@@ -16,6 +16,10 @@
  */
 package org.apache.wicket.core.request.resource;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -26,7 +30,10 @@ import java.io.InputStream;
 import java.util.Locale;
 
 import org.apache.wicket.Application;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ThreadContext;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
 import org.apache.wicket.request.Request;
@@ -43,6 +50,8 @@ import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.ResourceReference.UrlAttributes;
 import org.apache.wicket.response.ByteArrayResponse;
 import org.apache.wicket.util.io.IOUtils;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -396,4 +405,67 @@ class PackageResourceReferenceTest extends WicketTestCase
                assertEquals(variations[1], 
resource.getResourceStream().getVariation());
        }
 
+       @Test
+       public void getResouceWithNoStyle()
+       {
+               tester.executeUrl(
+                       
"wicket/resource/org.apache.wicket.core.request.resource.PackageResourceReferenceTest/a.css");
+
+               assertThat(tester.getLastResponseAsString(), 
not(containsString("color")));
+       }
+
+       @Test
+       public void getStyleFromSession()
+       {
+               tester.getSession().setStyle("blue");
+               tester.executeUrl(
+                       
"wicket/resource/org.apache.wicket.core.request.resource.PackageResourceReferenceTest/a.css");
+
+               assertThat(tester.getLastResponseAsString(), 
containsString("blue"));
+       }
+
+       @Test
+       public void decodeStyleFromUrl()
+       {
+               tester.getSession().setStyle("blue");
+               tester.executeUrl(
+                       
"wicket/resource/org.apache.wicket.core.request.resource.PackageResourceReferenceTest/a.css?-orange");
+
+               assertThat(tester.getLastResponseAsString(), 
containsString("orange"));
+       }
+
+       /**
+        * @see https://issues.apache.org/jira/browse/WICKET-7024
+        */
+       @Test
+       public void notDecodeStyleFromUrl()
+       {
+               tester.executeUrl(
+                       
"wicket/bookmarkable/org.apache.wicket.core.request.resource.PackageResourceReferenceTest$TestPage?0-1.0-resumeButton&_=1730041277224");
+
+               TestPage page = (TestPage)tester.getLastRenderedPage();
+
+               assertThat(page.resource.getStyle(), is(not("1.0")));
+       }
+
+       public static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
+       {
+               CssPackageResource resource;
+
+               @Override
+               protected void onConfigure()
+               {
+                       super.onConfigure();
+                       resource = (CssPackageResource)new 
PackageResourceReference(scope, "a.css")
+                               .getResource();
+               }
+
+               @Override
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
+                       Class<?> containerClass)
+               {
+                       return new 
StringResourceStream("<html><head></head><body></body></html>");
+               }
+       }
+
 }
diff --git 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_blue.css
 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_blue.css
new file mode 100644
index 0000000000..6c4aa1a395
--- /dev/null
+++ 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_blue.css
@@ -0,0 +1,3 @@
+.a{
+       color: blue;
+}
\ No newline at end of file
diff --git 
a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_orange.css
 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_orange.css
new file mode 100644
index 0000000000..3282726ba6
--- /dev/null
+++ 
b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/resource/a_orange.css
@@ -0,0 +1,3 @@
+.a{
+       color: orange;
+}
\ No newline at end of file
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
index f10a01cb83..67634e10da 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
@@ -26,6 +26,7 @@ import org.apache.wicket.Session;
 import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.cycle.RequestCycle;
+import 
org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.resource.ResourceUtil;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.lang.Packages;
@@ -114,7 +115,8 @@ public class PackageResourceReference extends 
ResourceReference
 
                RequestCycle requestCycle = RequestCycle.get();
                UrlAttributes urlAttributes = null;
-               if (requestCycle != null)
+               if (requestCycle != null
+                       && requestCycle.getActiveRequestHandler() instanceof 
ResourceReferenceRequestHandler)
                {
                        //resource attributes (locale, style, variation) might 
be encoded in the URL
                        final Url url = requestCycle.getRequest().getUrl();

Reply via email to