You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2023/06/21 12:25:57 UTC
[jackrabbit-oak] branch OAK-10304 updated: OAK-10304: work in progress
This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch OAK-10304
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/OAK-10304 by this push:
new 4509b34e77 OAK-10304: work in progress
4509b34e77 is described below
commit 4509b34e777c1eb3da430d364f48dd4acb79eeea
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Wed Jun 21 13:25:46 2023 +0100
OAK-10304: work in progress
---
.../plugins/name/ReadWriteNamespaceRegistry.java | 12 +++++-
.../name/ReadWriteNamespaceRegistryTest.java | 48 +++++++++++++++++-----
.../apache/jackrabbit/oak/jcr/RepositoryTest.java | 19 ---------
3 files changed, 49 insertions(+), 30 deletions(-)
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java
index 3acdc72561..adea1bbad6 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistry.java
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,7 +68,16 @@ public abstract class ReadWriteNamespaceRegistry
@Override
public void registerNamespace(String prefix, String uri)
throws RepositoryException {
- LOG.error("registering: " + uri);
+
+ // sanity check for legal namespace names (excluding the "internal"
+ // namespace, see OAK-74)
+ if (!NamespaceConstants.NAMESPACE_REP.equals(uri)) {
+ if (!uri.contains(":")) {
+ LOG.error("Registering invalid namespace name '" + uri + "' for prefix '" + prefix
+ + "', please see https://developer.adobe.com/experience-manager/reference-materials/spec/jcr/2.0/3_Repository_Model.html#3.2.1%20Namespaces",
+ new Exception("call stack"));
+ }
+ }
if (prefix.isEmpty() && uri.isEmpty()) {
return; // the default empty namespace is always registered
diff --git a/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistryTest.java b/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistryTest.java
index 9764a12c09..26b208df75 100644
--- a/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistryTest.java
+++ b/oak-it/src/test/java/org/apache/jackrabbit/oak/plugins/name/ReadWriteNamespaceRegistryTest.java
@@ -21,6 +21,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.util.List;
+
import javax.jcr.NamespaceException;
import javax.jcr.NamespaceRegistry;
@@ -29,10 +31,13 @@ import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.OakBaseTest;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
import org.junit.Test;
+import ch.qos.logback.classic.Level;
+
public class ReadWriteNamespaceRegistryTest extends OakBaseTest {
public ReadWriteNamespaceRegistryTest(NodeStoreFixture fixture) {
@@ -50,16 +55,7 @@ public class ReadWriteNamespaceRegistryTest extends OakBaseTest {
public void testMappings() throws Exception {
final ContentSession session = createContentSession();
final Root root = session.getLatestRoot();
- NamespaceRegistry r = new ReadWriteNamespaceRegistry(root) {
- @Override
- protected Root getWriteRoot() {
- return session.getLatestRoot();
- }
- @Override
- protected void refresh() {
- root.refresh();
- }
- };
+ NamespaceRegistry r = getNamespaceRegistry(session, root);
assertEquals("", r.getURI(""));
assertEquals("http://www.jcp.org/jcr/1.0", r.getURI("jcr"));
@@ -90,4 +86,36 @@ public class ReadWriteNamespaceRegistryTest extends OakBaseTest {
// expected
}
}
+
+ @Test
+ public void testInvalidNamespace() throws Exception {
+ final ContentSession session = createContentSession();
+ final Root root = session.getLatestRoot();
+ NamespaceRegistry r = getNamespaceRegistry(session, root);
+
+ LogCustomizer customLogs = LogCustomizer.forLogger("org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry").enable(Level.ERROR).create();
+ try {
+ customLogs.starting();
+ r.registerNamespace("xml", "example.com");
+ List<String> myLogs = customLogs.getLogs();
+ assertEquals("", myLogs.toString());
+ r.unregisterNamespace("foo");
+ }
+ finally {
+ customLogs.finished();
+ }
+ }
+
+ private NamespaceRegistry getNamespaceRegistry(ContentSession session, Root root) {
+ return new ReadWriteNamespaceRegistry(root) {
+ @Override
+ protected Root getWriteRoot() {
+ return session.getLatestRoot();
+ }
+ @Override
+ protected void refresh() {
+ root.refresh();
+ }
+ };
+ }
}
diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
index e8fedffcfe..f113e4e0d2 100644
--- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
+++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
@@ -91,7 +91,6 @@ import org.apache.jackrabbit.commons.cnd.ParseException;
import org.apache.jackrabbit.commons.jackrabbit.SimpleReferenceBinary;
import org.apache.jackrabbit.core.data.RandomInputStream;
import org.apache.jackrabbit.core.security.principal.AdminPrincipal;
-import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
@@ -1997,24 +1996,6 @@ public class RepositoryTest extends AbstractRepositoryTest {
assertFalse(asList(nsReg.getURIs()).contains("file:///foo"));
}
- // see OAK-10304
- @Test
- public void testNamespaceNames() throws RepositoryException {
- NamespaceRegistry nsReg = getAdminSession().getWorkspace().getNamespaceRegistry();
-
- LogCustomizer customLogs = LogCustomizer.forLogger("org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry").enable(Level.ERROR).create();
- try {
- customLogs.starting();
- nsReg.registerNamespace("foo", "example.com");
- List<String> myLogs = customLogs.getLogs();
- assertEquals("", myLogs.toString());
- nsReg.unregisterNamespace("foo");
- }
- finally {
- customLogs.finished();
- }
- }
-
@Test
public void sessionRemappedNamespace() throws RepositoryException {
NamespaceRegistry nsReg =