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 =