This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch bugfix/OAK-11450-detect-expanded-name in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 13f75550a479f6199db7c29940250b5ca1c5d349 Author: Konrad Windszus <[email protected]> AuthorDate: Sun Feb 2 11:19:34 2025 +0100 OAK-11450 Correctly detect expanded names using empty namespace or internal namespace --- .../oak/namepath/impl/GlobalNameMapper.java | 24 ++++++++++++++-------- .../oak/namepath/impl/GlobalNameMapperTest.java | 12 +++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java index d2c54d12c2..108d048386 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java @@ -16,21 +16,21 @@ */ package org.apache.jackrabbit.oak.namepath.impl; -import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument; import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; import static java.util.Objects.requireNonNull; import static org.apache.jackrabbit.oak.api.Type.STRINGS; +import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument; import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; +import static org.apache.jackrabbit.oak.plugins.name.Namespaces.encodeUri; +import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getString; +import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getStrings; +import static org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory.createReadOnlyRoot; +import static org.apache.jackrabbit.oak.plugins.tree.factories.TreeFactory.createReadOnlyTree; import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.NAMESPACES_PATH; import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_NSDATA; import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_PREFIXES; import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_URIS; -import static org.apache.jackrabbit.oak.plugins.name.Namespaces.encodeUri; -import static org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory.createReadOnlyRoot; -import static org.apache.jackrabbit.oak.plugins.tree.factories.TreeFactory.createReadOnlyTree; -import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getString; -import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getStrings; import java.util.Map; import java.util.Map.Entry; @@ -40,6 +40,7 @@ import javax.jcr.RepositoryException; import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.namepath.NameMapper; +import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.jetbrains.annotations.NotNull; @@ -67,10 +68,15 @@ public class GlobalNameMapper implements NameMapper { protected static boolean isExpandedName(String name) { if (name.startsWith("{")) { int brace = name.indexOf('}', 1); - return brace != -1 && name.substring(1, brace).indexOf(':') != -1; - } else { - return false; + if (brace != -1) { + String namespace = name.substring(1, brace); + // the empty namespace and "internal" are valid as well, otherwise it always contains a colon (as it is a URI) + if (namespace.isEmpty() || namespace.equals(NamespaceConstants.NAMESPACE_REP)|| namespace.indexOf(':') != -1) { + return true; + } + } } + return false; } private final Root root; diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapperTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapperTest.java index d0eade307b..268116cd37 100644 --- a/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapperTest.java +++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapperTest.java @@ -17,7 +17,9 @@ package org.apache.jackrabbit.oak.namepath.impl; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; @@ -108,4 +110,14 @@ public class GlobalNameMapperTest { assertEquals(name, mapper.getJcrName(name)); } } + + @Test + public void testIsExpandedName() { + assertTrue(GlobalNameMapper.isExpandedName("{}something")); + assertTrue(GlobalNameMapper.isExpandedName("{internal}something")); + assertTrue(GlobalNameMapper.isExpandedName("{http://www.jcp.org/jcr/nt/1.0}something")); + assertFalse(GlobalNameMapper.isExpandedName("{something not a namespace}something")); + assertFalse(GlobalNameMapper.isExpandedName("rep:something")); + assertFalse(GlobalNameMapper.isExpandedName("something")); + } }
