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 re...@apache.org on 2016/10/25 16:40:50 UTC

svn commit: r1766554 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb: RDBDocumentSerializer.java RDBDocumentStoreJDBC.java

Author: reschke
Date: Tue Oct 25 16:40:50 2016
New Revision: 1766554

URL: http://svn.apache.org/viewvc?rev=1766554&view=rev
Log:
OAK-4986: RDBDocumentStore: potential NPE in document read

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java?rev=1766554&r1=1766553&r2=1766554&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java Tue Oct 25 16:40:50 2016
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.document.rdb;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBJSONSupport.appendJsonMember;
 import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBJSONSupport.appendJsonString;
 import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBJSONSupport.appendJsonValue;
@@ -144,6 +145,10 @@ public class RDBDocumentSerializer {
      */
     @Nonnull
     public <T extends Document> T fromRow(@Nonnull Collection<T> collection, @Nonnull RDBRow row) throws DocumentStoreException {
+
+        final String charData = row.getData();
+        checkNotNull(charData, "RDBRow.getData() is null for collection " + collection + ", id: " + row.getId());
+
         T doc = collection.newDocument(store);
         doc.put(ID, row.getId());
         if (row.getModified() != RDBRow.LONG_UNSET) {
@@ -181,7 +186,6 @@ public class RDBDocumentSerializer {
             throw new DocumentStoreException(ex);
         }
 
-        String charData = row.getData();
         json = new JsopTokenizer(charData);
 
         // start processing the VARCHAR data

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java?rev=1766554&r1=1766553&r2=1766554&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java Tue Oct 25 16:40:50 2016
@@ -631,7 +631,7 @@ public class RDBDocumentStoreJDBC {
     @CheckForNull
     public RDBRow read(Connection connection, RDBTableMetaData tmd, String id, long lastmodcount, long lastmodified) throws SQLException {
 
-        boolean useCaseStatement = lastmodcount != -1 && this.dbInfo.allowsCaseInSelect();
+        boolean useCaseStatement = lastmodcount != -1 && lastmodified >= 1 && this.dbInfo.allowsCaseInSelect();
         StringBuffer sql = new StringBuffer();
         sql.append("select MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, ");
         if (useCaseStatement) {