You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:00:09 UTC
[sling-org-apache-sling-resourcemerger] 28/31: SLING-4878 -
Resource Merger: Infinite loop in case a parent resource has one of its
children as a supertype
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.resourcemerger-1.2.10
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcemerger.git
commit 8e5af97dcf551d56dd86eebd42f53047bee4b73d
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Jul 15 08:30:34 2015 +0000
SLING-4878 - Resource Merger: Infinite loop in case a parent resource has one of its children as a supertype
* fixed infinite loop if an inheritance loop exists
(applied patch from Vlad Bailescu)
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1691143 13f79535-47bb-0310-9956-ffa450edef68
---
.../impl/picker/OverridingResourcePicker.java | 8 +++++++-
.../impl/OverridingResourceProviderTest.java | 20 ++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java b/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
index 49090ec..40ac7b8 100644
--- a/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
+++ b/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
@@ -20,7 +20,9 @@ package org.apache.sling.resourcemerger.impl.picker;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -52,6 +54,7 @@ public class OverridingResourcePicker implements MergedResourcePicker {
public List<Resource> pickResources(ResourceResolver resolver, String relativePath) {
String absPath = "/" + relativePath;
final List<Resource> resources = new ArrayList<Resource>();
+ final Set<String> roots = new HashSet<String>();
Resource currentTarget = resolver.getResource(absPath);
@@ -70,7 +73,9 @@ public class OverridingResourcePicker implements MergedResourcePicker {
final Resource inheritanceRootResource = info.resource;
final String pathRelativeToInheritanceRoot = info.getPathRelativeToInheritanceRoot();
final String superType = inheritanceRootResource.getResourceSuperType();
- if (superType == null) {
+
+ if (superType == null
+ || roots.contains(inheritanceRootResource.getPath())) { // avoid inheritance loops
currentTarget = null;
} else {
final String superTypeChildPath = superType + pathRelativeToInheritanceRoot;
@@ -81,6 +86,7 @@ public class OverridingResourcePicker implements MergedResourcePicker {
currentTarget = new StubResource(resolver, superTypeChildPath);
}
resources.add(currentTarget);
+ roots.add(inheritanceRootResource.getPath());
}
}
}
diff --git a/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java b/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
index 7531002..8017f1f 100644
--- a/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
+++ b/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
@@ -62,6 +62,9 @@ public class OverridingResourceProviderTest {
*
* /apps/a/2 has the super type of /apps/a/1
* /apps/a/3 has the super type of /apps/a/2
+ *
+ * /apps/a/4 has the super type of /apps/a/4/b/4
+ * /apps/x has the super type of x/y
*/
@Before
public void setup() throws Exception {
@@ -85,6 +88,13 @@ public class OverridingResourceProviderTest {
.resource("/apps/a/2").p(SUPER_TYPE, "a/1").p("b", "2").p(MergedResourceConstants.PN_HIDE_CHILDREN, new String[] {"b"})
.resource("c").p("1", "c")
.resource("/apps/a/3").p(SUPER_TYPE, "a/2")
+ .resource("/apps/a/4").p(SUPER_TYPE, "/apps/a/4/b/4")
+ .resource("b")
+ .resource("4")
+ .resource("d")
+ .resource("/apps/x").p(SUPER_TYPE, "x/y")
+ .resource("y")
+ .resource("z")
.commit();
this.provider = new MergingResourceProvider("/override", new OverridingResourcePicker(), false, true);
@@ -168,4 +178,14 @@ public class OverridingResourceProviderTest {
assertNotNull(d1a);
}
+ @Test
+ public void testLoopInInheritance() {
+ final Resource rsrcA4 = this.provider.getResource(this.resolver, "/override/apps/a/4");
+
+ Resource d = getChildResource(rsrcA4, "d");
+ assertNotNull(d);
+
+ final Resource z = this.provider.getResource(this.resolver, "/override/apps/x/z");
+ assertNotNull(z);
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.