You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2012/07/18 14:58:28 UTC

svn commit: r1362924 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java

Author: reschke
Date: Wed Jul 18 12:58:28 2012
New Revision: 1362924

URL: http://svn.apache.org/viewvc?rev=1362924&view=rev
Log:
JCR-3393: InternalVersionManagerBase.calculateCheckinVersionName may fail with NPE on broken versioning persistence

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java?rev=1362924&r1=1362923&r2=1362924&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java Wed Jul 18 12:58:28 2012
@@ -699,6 +699,13 @@ abstract class InternalVersionManagerBas
     protected String calculateCheckinVersionName(InternalVersionHistoryImpl history,
                                                  NodeStateEx node, boolean simple)
             throws RepositoryException {
+
+        if (history == null) {
+            String message = "Node " + node.getNodeId() + " has no version history";
+            log.error(message);
+            throw new VersionException(message);
+        }
+
         InternalVersion best = null;
         if (simple) {
             // 1. in simple versioning just take the 'head' version
@@ -721,12 +728,24 @@ abstract class InternalVersionManagerBas
 
             for (InternalValue value: values) {
                 InternalVersion pred = history.getVersion(value.getNodeId());
+                if (pred == null) {
+                    String message = "Could not instantiate InternalVersion for nodeId " + value.getNodeId() + " (VHR + " + history.getId() + ", node " + node.getNodeId() + ")";
+                    log.error(message);
+                    throw new VersionException(message);
+                }
                 if (best == null
                         || pred.getName().getLocalName().length() < best.getName().getLocalName().length()) {
                     best = pred;
                 }
             }
         }
+
+        if (best == null) {
+            String message = "Could not find 'best' predecessor node for " + node.getNodeId();
+            log.error(message);
+            throw new VersionException(message);
+        }
+
         // 2. generate version name (assume no namespaces in version names)
         String versionName = best.getName().getLocalName();
         int pos = versionName.lastIndexOf('.');