This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch 1.x
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
The following commit(s) were added to refs/heads/1.x by this push:
new bf61047f SLING-12901: alias refactoring - NPE when attempting to alias
root (#196)
bf61047f is described below
commit bf61047f536d9557e683591a3be363c8130a18db
Author: Julian Reschke <[email protected]>
AuthorDate: Fri Aug 22 19:37:36 2025 +0200
SLING-12901: alias refactoring - NPE when attempting to alias root (#196)
---
.../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);