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");
