Updated Branches:
  refs/heads/wicket-1.4.x e6d140851 -> 4c437fef1

allow non-Wicket markup to be served from PackageResource


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4c437fef
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4c437fef
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4c437fef

Branch: refs/heads/wicket-1.4.x
Commit: 4c437fef16e9c8705cd79246eae67993077490f4
Parents: e6d1408
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Jan 28 10:22:33 2014 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Jan 28 10:22:33 2014 +0100

----------------------------------------------------------------------
 .../markup/html/PackageResourceGuard.java       | 24 +++++--
 .../markup/html/PackageResourceGuardTest.java   | 66 ++++++++++++++++++++
 2 files changed, 85 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4c437fef/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
----------------------------------------------------------------------
diff --git 
a/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java 
b/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
index dd1ae88..0ebb48c 100644
--- 
a/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
+++ 
b/wicket/src/main/java/org/apache/wicket/markup/html/PackageResourceGuard.java
@@ -91,12 +91,26 @@ public class PackageResourceGuard implements 
IPackageResourceGuard
                        ext = path.substring(ixExtension + 
1).toLowerCase().trim();
                }
 
-               if ("html".equals(ext) &&
-                       
getClass().getClassLoader().getResource(path.replaceAll("\\.html", ".class")) 
!= null)
+               if ("html".equals(ext))
                {
-                       log.warn("Access denied to shared (static) resource 
because it is a Wicket markup file: " +
-                               path);
-                       return false;
+                       String prefix = path.substring(0, ixExtension);
+                       ClassLoader classLoader = getClass().getClassLoader();
+                       while (true)
+                       {
+                               if (classLoader.getResource(prefix + ".class") 
!= null)
+                               {
+                                       log.warn("Access denied to shared 
(static) resource because it is a Wicket markup file: " +
+                                               path);
+                                       return false;
+                               }
+
+                               int ixUnderscore = prefix.lastIndexOf('_');
+                               if (ixUnderscore == -1)
+                               {
+                                       break;
+                               }
+                               prefix = prefix.substring(0, ixUnderscore);
+                       }
                }
 
                if (acceptExtension(ext) == false)

http://git-wip-us.apache.org/repos/asf/wicket/blob/4c437fef/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
----------------------------------------------------------------------
diff --git 
a/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
 
b/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
new file mode 100644
index 0000000..32a0210
--- /dev/null
+++ 
b/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceGuardTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html;
+
+import org.apache.wicket.WicketTestCase;
+import org.junit.Test;
+
+/**
+ * @author Juergen Donnerstag
+ */
+public class PackageResourceGuardTest extends WicketTestCase
+{
+       /**
+        * Allow access to non-component markup
+        * 
+        * @throws Exception
+        */
+       @Test
+       public void testMarkup() throws Exception
+       {
+               PackageResourceGuard guard = new PackageResourceGuard();
+
+               assertNotNull(getClass().getResource(
+                       
"/org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass.class"));
+
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass.html"));
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass_de.html"));
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyClass_SomeHTMLSnippetIWantServed.html"));
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName.html"));
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName_de.html"));
+               
assertFalse(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass_WithCrazyName_en.html"));
+               
assertTrue(guard.acceptAbsolutePath("org/apache/wicket/markup/html/PackageResourceGuardTest$MyOtherClass.html"));
+       }
+
+       private class MyClass extends WebComponent
+       {
+
+               public MyClass(String id)
+               {
+                       super(id);
+               }
+       }
+
+       private class MyOtherClass_WithCrazyName extends WebComponent
+       {
+
+               public MyOtherClass_WithCrazyName(String id)
+               {
+                       super(id);
+               }
+       }
+}

Reply via email to