You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2011/11/01 16:42:09 UTC

svn commit: r1196062 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/SessionImpl.java test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java

Author: stefan
Date: Tue Nov  1 15:42:08 2011
New Revision: 1196062

URL: http://svn.apache.org/viewvc?rev=1196062&view=rev
Log:
JCR-3131: NPE in ItemManager when calling Session.save() with nothing to save

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=1196062&r1=1196061&r2=1196062&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Tue Nov  1 15:42:08 2011
@@ -806,7 +806,10 @@ public class SessionImpl extends Abstrac
      * {@inheritDoc}
      */
     public void save() throws RepositoryException {
-        perform(new SessionSaveOperation());
+        // JCR-3131: no need to perform save op when there's nothing to save...
+        if (context.getItemStateManager().hasAnyTransientItemStates()) {
+            perform(new SessionSaveOperation());
+        }
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java?rev=1196062&r1=1196061&r2=1196062&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/WriteTest.java Tue Nov  1 15:42:08 2011
@@ -504,4 +504,30 @@ public class WriteTest extends AbstractW
             // success
         }
     }
+    
+    // https://issues.apache.org/jira/browse/JCR-3131
+    public void testEmptySaveNoRootAccess() throws RepositoryException, NotExecutableException {
+
+        Session s = getTestSession();
+        s.save();
+
+        Privilege[] read = privilegesFromName(Privilege.JCR_READ);
+
+        try {
+            JackrabbitAccessControlList tmpl = getPolicy(acMgr, "/", testUser.getPrincipal());
+            tmpl.addEntry(testUser.getPrincipal(), read, false, getRestrictions(superuser, path));
+            acMgr.setPolicy(tmpl.getPath(), tmpl);
+            superuser.save();
+
+            // empty save operation
+            s.save();
+        }
+        finally {
+            // undo revocation of read privilege
+            JackrabbitAccessControlList tmpl = getPolicy(acMgr, "/", testUser.getPrincipal());
+            tmpl.addEntry(testUser.getPrincipal(), read, true, getRestrictions(superuser, path));
+            acMgr.setPolicy(tmpl.getPath(), tmpl);
+            superuser.save();
+        }
+    }
 }
\ No newline at end of file