Author: mreutegg
Date: Thu Apr 11 09:36:26 2019
New Revision: 1857304

URL: http://svn.apache.org/viewvc?rev=1857304&view=rev
Log:
OAK-8218: ReadOnlyNodeTypeManager.isNodeType prone to NPE

Modified:
    
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
    
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistry.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/JcrUUIDTest.java
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
    jackrabbit/oak/trunk/oak-search/   (props changed)
    
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugConfiguration.java
 Thu Apr 11 09:36:26 2019
@@ -233,6 +233,7 @@ public class CugConfiguration extends Co
     static boolean registerCugNodeTypes(@NotNull final Root root) {
         try {
             ReadOnlyNodeTypeManager ntMgr = new ReadOnlyNodeTypeManager() {
+                @NotNull
                 @Override
                 protected Tree getTypes() {
                     return root.getTree(NodeTypeConstants.NODE_TYPES_PATH);

Modified: 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
 Thu Apr 11 09:36:26 2019
@@ -153,7 +153,7 @@ public class CugValidatorTest extends Ab
                 return root;
             }
 
-            @Nullable
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
 Thu Apr 11 09:36:26 2019
@@ -485,7 +485,8 @@ class NodeTypeImpl extends AbstractTypeD
     private ReadOnlyNodeTypeManager getManager() {
         final Tree types = definition.getParent();
         return new ReadOnlyNodeTypeManager() {
-            @Override @Nullable
+            @NotNull
+            @Override
             protected Tree getTypes() {
                 return types;
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
 Thu Apr 11 09:36:26 2019
@@ -82,10 +82,13 @@ public abstract class ReadOnlyNodeTypeMa
     }
 
     /**
-     * @return  {@link org.apache.jackrabbit.oak.api.Tree} instance where the 
node types
-     * are stored or {@code null} if none.
+     * Returns the {@link Tree} instance where the node types are stored. This
+     * method never returns {@code null} and may return a {@code Tree} that
+     * does not exist (see {@link Tree#exists()} when there are no types 
stored.
+     *
+     * @return {@link Tree} instance where the node types are stored.
      */
-    @Nullable
+    @NotNull
     protected abstract Tree getTypes();
 
     /**
@@ -125,6 +128,7 @@ public abstract class ReadOnlyNodeTypeMa
     public static ReadOnlyNodeTypeManager getInstance(final Root root,
                                                       final NamePathMapper 
namePathMapper) {
         return new ReadOnlyNodeTypeManager() {
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);
@@ -142,8 +146,7 @@ public abstract class ReadOnlyNodeTypeMa
 
     @Override
     public boolean hasNodeType(String name) throws RepositoryException {
-        Tree types = getTypes();
-        return types != null && types.hasChild(getOakName(name));
+        return getTypes().hasChild(getOakName(name));
     }
 
     @Override
@@ -155,11 +158,9 @@ public abstract class ReadOnlyNodeTypeMa
     public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
         List<NodeType> list = Lists.newArrayList();
         Tree types = getTypes();
-        if (types != null) {
-            NamePathMapper mapper = getNamePathMapper();
-            for (Tree type : types.getChildren()) {
-                list.add(new NodeTypeImpl(type, mapper));
-            }
+        NamePathMapper mapper = getNamePathMapper();
+        for (Tree type : types.getChildren()) {
+            list.add(new NodeTypeImpl(type, mapper));
         }
         return new NodeTypeIteratorAdapter(list);
     }
@@ -411,11 +412,9 @@ public abstract class ReadOnlyNodeTypeMa
     @NotNull
     NodeTypeImpl internalGetNodeType(@NotNull String oakName) throws 
NoSuchNodeTypeException {
         Tree types = getTypes();
-        if (types != null) {
-            Tree type = types.getChild(oakName);
-            if (type.exists()) {
-                return new NodeTypeImpl(type, getNamePathMapper());
-            }
+        Tree type = types.getChild(oakName);
+        if (type.exists()) {
+            return new NodeTypeImpl(type, getNamePathMapper());
         }
         throw new 
NoSuchNodeTypeException(getNamePathMapper().getJcrName(oakName));
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistry.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistry.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistry.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistry.java
 Thu Apr 11 09:36:26 2019
@@ -51,6 +51,7 @@ public final class NodeTypeRegistry {
 
     private NodeTypeRegistry(final Root root) {
         this.ntMgr =  new ReadWriteNodeTypeManager() {
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
 Thu Apr 11 09:36:26 2019
@@ -182,12 +182,14 @@ public class NodeTypeRegistryTest {
         registerNodeType(root, "oak6440-1.cnd");
         NodeTypeManager readOnlyNtMgr = new ReadOnlyNodeTypeManager() {
             private Root r = session.getLatestRoot();
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return r.getTree(NODE_TYPES_PATH);
             }
         };
         NodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);
@@ -234,6 +236,7 @@ public class NodeTypeRegistryTest {
     @Test
     public void reRegisterNtResource() throws Exception {
         NodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/JcrUUIDTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/JcrUUIDTest.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/JcrUUIDTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/JcrUUIDTest.java
 Thu Apr 11 09:36:26 2019
@@ -57,6 +57,7 @@ public class JcrUUIDTest extends Abstrac
                 return root;
             }
 
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return root.getTree(NODE_TYPES_PATH);

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
 Thu Apr 11 09:36:26 2019
@@ -81,6 +81,7 @@ public class WorkspaceImpl implements Ja
                 getSession().refresh(true);
             }
 
+            @NotNull
             @Override
             protected Tree getTypes() {
                 return sessionDelegate.getRoot().getTree(NODE_TYPES_PATH);

Propchange: jackrabbit/oak/trunk/oak-search/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Apr 11 09:36:26 2019
@@ -1,3 +1,5 @@
 target
 .*
 *.iml
+*.ipr
+*.iws

Modified: 
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java
 Thu Apr 11 09:36:26 2019
@@ -42,6 +42,7 @@ import com.google.common.collect.Sets;
 import com.google.common.primitives.Ints;
 import org.apache.jackrabbit.JcrConstants;
 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.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
@@ -51,7 +52,7 @@ import org.apache.jackrabbit.oak.plugins
 import 
org.apache.jackrabbit.oak.plugins.index.search.util.FunctionIndexProcessor;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
-import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory;
 import org.apache.jackrabbit.oak.plugins.tree.factories.TreeFactory;
 import org.apache.jackrabbit.oak.spi.filter.PathFilter;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex.OrderEntry;
@@ -774,7 +775,7 @@ public class IndexDefinition implements
         }
 
         Map<String, List<IndexingRule>> nt2rules = newHashMap();
-        ReadOnlyNodeTypeManager ntReg = 
createNodeTypeManager(TreeFactory.createReadOnlyTree(root));
+        ReadOnlyNodeTypeManager ntReg = 
createNodeTypeManager(RootFactory.createReadOnlyRoot(root));
 
         //Use Tree API to read ordered child nodes
         Tree ruleTree = TreeFactory.createReadOnlyTree(indexRules);
@@ -1593,11 +1594,12 @@ public class IndexDefinition implements
         }
     }
 
-    private static ReadOnlyNodeTypeManager createNodeTypeManager(final Tree 
root) {
+    private static ReadOnlyNodeTypeManager createNodeTypeManager(final Root 
root) {
         return new ReadOnlyNodeTypeManager() {
+            @NotNull
             @Override
             protected Tree getTypes() {
-                return TreeUtil.getTree(root,NODE_TYPES_PATH);
+                return root.getTree(NODE_TYPES_PATH);
             }
 
             @NotNull

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1857304&r1=1857303&r2=1857304&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 Thu Apr 11 09:36:26 2019
@@ -451,6 +451,7 @@ public class RepositoryUpgrade {
             } else {
                 logger.info("Copying registered node types");
                 NodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+                    @NotNull
                     @Override
                     protected Tree getTypes() {
                         return upgradeRoot.getTree(NODE_TYPES_PATH);


Reply via email to