You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by re...@apache.org on 2025/08/22 17:21:50 UTC
(sling-org-apache-sling-resourceresolver) 01/01: SLING-12901: alias refactoring - NPE when attempting to alias root
This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch SLING-12901
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit f9a5e2de7b61c63035988ec2591bd86f97a1fa27
Author: Julian Reschke <re...@apache.org>
AuthorDate: Fri Aug 22 18:21:32 2025 +0100
SLING-12901: alias refactoring - NPE when attempting to alias root
---
.../impl/mapping/AliasHandler.java | 26 ++++++++++++++--------
.../impl/mapping/AliasMapEntriesTest.java | 20 ++++++++++++++---
2 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
index de9b3676..40c8e57d 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
@@ -203,8 +203,8 @@ class AliasHandler {
@NotNull
private Map<String, Map<String, Collection<String>>> loadAliases(
@NotNull ResourceResolver resolver,
- @Nullable List<String> conflictingAliases,
- @Nullable List<String> invalidAliases,
+ @NotNull List<String> conflictingAliases,
+ @NotNull List<String> invalidAliases,
@NotNull StringBuilder diagnostics) {
Map<String, Map<String, Collection<String>>> map = new ConcurrentHashMap<>();
@@ -529,13 +529,21 @@ class AliasHandler {
return false;
} else {
// but apply them to the containing resource
- return loadAliasFromArray(
- aliasArray,
- map,
- conflictingAliases,
- invalidAliases,
- containingResource.getName(),
- ResourceUtil.getParent(containingResource.getPath()));
+
+ String parentPath = ResourceUtil.getParent(containingResource.getPath());
+
+ if (parentPath == null) {
+ log.debug("the root path cannot have aliases");
+ return false;
+ } else {
+ return loadAliasFromArray(
+ aliasArray,
+ map,
+ conflictingAliases,
+ invalidAliases,
+ containingResource.getName(),
+ parentPath);
+ }
}
}
}
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
index 8ac52f15..3a90ef73 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
@@ -176,11 +176,11 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest {
}
}
- private static void addResource(MapEntries mapEntries, String path, AtomicBoolean bool)
+ private static boolean addResource(MapEntries mapEntries, String path, AtomicBoolean bool)
throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
Method method = MapEntries.class.getDeclaredMethod("addResource", String.class, AtomicBoolean.class);
method.setAccessible(true);
- method.invoke(mapEntries, path, bool);
+ return (Boolean) method.invoke(mapEntries, path, bool);
}
private static void removeResource(MapEntries mapEntries, String path, AtomicBoolean bool)
@@ -496,6 +496,17 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest {
actual.contains(match1) || actual.contains(match2));
}
+ // SLING-12901
+ @Test
+ public void test_doAddAliasOnRoot() throws Exception {
+ Resource root = createMockedResource("/");
+ when(root.getValueMap()).thenReturn(buildValueMap(ResourceResolverImpl.PROP_ALIAS, "alias"));
+
+ assertFalse(
+ "attempts to add aliases to root must be ignored",
+ addResource(mapEntries, root.getPath(), new AtomicBoolean()));
+ }
+
// SLING-3727
@Test
public void test_doAddAliasAttributesWithDisableAliasOptimization() throws Exception {
@@ -541,7 +552,10 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest {
// SLING-3727
@Test
public void test_doRemoveAttributesWithDisableAliasOptimization() throws Exception {
- when(resourceResolverFactory.isOptimizeAliasResolutionEnabled()).thenReturn(false);
+ Assume.assumeFalse(
+ "checks behaviour for non-optimized case only",
+ resourceResolverFactory.isOptimizeAliasResolutionEnabled());
+
mapEntries = new MapEntries(
resourceResolverFactory, bundleContext, eventAdmin, stringInterpolationProvider, metrics);