This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new ae48fc10cb OAK-11450 Correctly detect expanded names using empty
namespace or internal namespace
ae48fc10cb is described below
commit ae48fc10cbe02aaa4cb9d571bd8ca39daea46fa7
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 | 25 ++++++++++++++--------
.../oak/namepath/impl/GlobalNameMapperTest.java | 12 +++++++++++
2 files changed, 28 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..507f1ab2cb 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,16 @@ 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)
+ // compare with RFC 3986, Section 3
(https://datatracker.ietf.org/doc/html/rfc3986#section-3)
+ 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"));
+ }
}