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

reschke pushed a commit to branch SLING-12399
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit 39ad4c3f52d9dac4ef66e900f7af54c823f93c23
Author: Julian Reschke <[email protected]>
AuthorDate: Thu Aug 22 15:02:30 2024 +0100

    SLING-12399: make empty alias invalid
---
 .../resourceresolver/impl/mapping/MapEntries.java   |  6 +++---
 .../impl/mapping/MapEntriesTest.java                | 21 +++++++++------------
 2 files changed, 12 insertions(+), 15 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index 73fed11..0ed8a25 100644
--- 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -1270,7 +1270,7 @@ public class MapEntries implements
                 // the order matters here, the first alias in the array must 
come first
                 for (final String alias : aliasArray) {
                     if (isAliasInvalid(alias)) {
-                        log.warn("Encountered invalid alias {} under parent 
path {}. Refusing to use it.", alias, parentPath);
+                        log.warn("Encountered invalid alias '{}' under parent 
path '{}'. Refusing to use it.", alias, parentPath);
                     } else {
                         Map<String, Collection<String>> parentMap = 
map.computeIfAbsent(parentPath, key -> new ConcurrentHashMap<>());
                         Optional<String> siblingResourceNameWithDuplicateAlias 
= parentMap.entrySet().stream()
@@ -1279,7 +1279,7 @@ public class MapEntries implements
                                 .findFirst().map(Map.Entry::getKey);
                         if (siblingResourceNameWithDuplicateAlias.isPresent()) 
{
                             log.warn(
-                                    "Encountered duplicate alias {} under 
parent path {}. Refusing to replace current target {} with {}.",
+                                    "Encountered duplicate alias '{}' under 
parent path '{}'. Refusing to replace current target {} with {}.",
                                     alias, parentPath, 
siblingResourceNameWithDuplicateAlias.get(), resourceName);
                         } else {
                             Collection<String> existingAliases = 
parentMap.computeIfAbsent(resourceName, name -> new CopyOnWriteArrayList<>());
@@ -1298,7 +1298,7 @@ public class MapEntries implements
      * Check alias syntax
      */
     private static boolean isAliasInvalid(String alias) {
-        boolean invalid = alias.equals("..") || alias.equals(".");
+        boolean invalid = alias.equals("..") || alias.equals(".") || 
alias.isEmpty();
         if (!invalid) {
             for (final char c : alias.toCharArray()) {
                 // invalid if / or # or a ?
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
index ea4512c..4335efe 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
@@ -178,15 +178,12 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
     @Test
     public void test_simple_alias_support() {
-        // SLING-12399 - empty alias is returned back (might be a bug)
-        for (String validAlias : List.of("alias", "")) {
-            prepareMapEntriesForAlias(validAlias);
-            mapEntries.doInit();
-            Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
-            assertNotNull(aliasMap);
-            assertTrue(aliasMap.containsKey("child"));
-            assertEquals(List.of(validAlias), aliasMap.get("child"));
-        }
+        prepareMapEntriesForAlias("alias");
+        mapEntries.doInit();
+        Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
+        assertNotNull(aliasMap);
+        assertTrue(aliasMap.containsKey("child"));
+        assertEquals(List.of("alias"), aliasMap.get("child"));
     }
 
     @Test
@@ -201,18 +198,18 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
     @Test
     public void test_simple_multi_alias_support_with_blank_and_invalid() {
-        // SLING-12399 - invalid aliases filtered out (but empty string not 
considered invalid)
+        // invalid aliases filtered out
         prepareMapEntriesForAlias("", "foo", ".", "bar", "x/y", "qux", " ");
         mapEntries.doInit();
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
         assertTrue(aliasMap.containsKey("child"));
-        assertEquals(List.of("", "foo", "bar", "qux", " "), 
aliasMap.get("child"));
+        assertEquals(List.of("foo", "bar", "qux", " "), aliasMap.get("child"));
     }
 
     @Test
     public void test_alias_support_invalid() {
-        for (String invalidAlias : List.of(".", "..", "foo/bar")) {
+        for (String invalidAlias : List.of(".", "..", "foo/bar", "# foo", "")) 
{
             prepareMapEntriesForAlias(invalidAlias);
             mapEntries.doInit();
             Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");

Reply via email to