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 mr...@apache.org on 2016/10/05 16:17:20 UTC

svn commit: r1763465 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java

Author: mreutegg
Date: Wed Oct  5 16:17:20 2016
New Revision: 1763465

URL: http://svn.apache.org/viewvc?rev=1763465&view=rev
Log:
OAK-4894: Potential NPE in Commit.apply()

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1763465&r1=1763464&r2=1763465&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java Wed Oct  5 16:17:20 2016
@@ -179,9 +179,12 @@ public class Commit {
                 success = true;
             } finally {
                 if (!success) {
-                    b.removeCommit(rev.asBranchRevision());
-                    if (!b.hasCommits()) {
-                        nodeStore.getBranches().remove(b);
+                    Branch branch = getBranch();
+                    if (branch != null) {
+                        branch.removeCommit(rev.asBranchRevision());
+                        if (!branch.hasCommits()) {
+                            nodeStore.getBranches().remove(branch);
+                        }
                     }
                 }
             }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java?rev=1763465&r1=1763464&r2=1763465&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java Wed Oct  5 16:17:20 2016
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -107,6 +108,29 @@ public class CommitTest {
             }
         } finally {
             ns.canceled(c);
+        }
+    }
+
+    // OAK-4894
+    @Test
+    public void branchCommitFails() throws Exception {
+        // prepare node store
+        DocumentNodeStore ns = builderProvider.newBuilder().getNodeStore();
+
+        // this branch commit must fail with a DocumentStoreException
+        Commit c = ns.newCommit(ns.getHeadRevision().asBranchRevision(ns.getClusterId()), null);
+        try {
+            c.removeNode("/foo", EMPTY_NODE);
+            try {
+                c.apply();
+                fail("commit must fail");
+            } catch (DocumentStoreException e) {
+                // expected
+                assertTrue("Unexpected exception message: " + e.getMessage(),
+                        e.getMessage().contains("does not exist"));
+            }
+        } finally {
+            ns.canceled(c);
         }
     }
 }