Author: tomekr
Date: Mon Jul 24 21:27:41 2017
New Revision: 1802871
URL: http://svn.apache.org/viewvc?rev=1802871&view=rev
Log:
OAK-6486: NPE in CompositeNodeStore
Check arguments carefully in the createRootNodeState() method.
Modified:
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositionContext.java
Modified:
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositionContext.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositionContext.java?rev=1802871&r1=1802870&r2=1802871&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositionContext.java
(original)
+++
jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositionContext.java
Mon Jul 24 21:27:41 2017
@@ -174,10 +174,26 @@ class CompositionContext {
}
CompositeNodeState createRootNodeState(Map<MountedNodeStore, NodeState>
rootStates) {
- for (NodeState s : rootStates.values()) {
- if (s instanceof CompositeNodeState) {
+ for (Map.Entry<MountedNodeStore, NodeState> e : rootStates.entrySet())
{
+ MountedNodeStore mns = e.getKey();
+ NodeState nodeState = e.getValue();
+ if (nodeState instanceof CompositeNodeState) {
throw new IllegalArgumentException("Nesting composite node
states is not supported");
}
+ if (nodeState == null) {
+ throw new NullPointerException("Passed null as a nodestate for
" + mns.getMount().getName());
+ }
+ }
+ for (MountedNodeStore mns : nonDefaultStores) {
+ if (!rootStates.containsKey(mns)) {
+ throw new IllegalArgumentException("Can't find node state for
" + mns.getMount().getName());
+ }
+ }
+ if (!rootStates.containsKey(globalStore)) {
+ throw new IllegalArgumentException("Can't find node state for the
global store");
+ }
+ if (rootStates.size() != nonDefaultStores.size() + 1) {
+ throw new IllegalArgumentException("Too many root states passed: "
+ rootStates.size());
}
return new CompositeNodeState("/", rootStates, this);
}