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('.');