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 2018/02/16 12:52:28 UTC

svn commit: r1824459 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/rdb/ test/java/org/apache/jackrabbit/oak/plugins/document/

Author: reschke
Date: Fri Feb 16 12:52:28 2018
New Revision: 1824459

URL: http://svn.apache.org/viewvc?rev=1824459&view=rev
Log:
OAK-7270: RDBDocumentStore: guard against invalid strings in IDs

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java?rev=1824459&r1=1824458&r2=1824459&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java Fri Feb 16 12:52:28 2018
@@ -56,6 +56,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.RDBTableMetaData;
 import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStoreDB.FETCHFIRSTSYNTAX;
 import org.apache.jackrabbit.oak.plugins.document.rdb.RDBJDBCTools.PreparedStatementComponent;
+import org.apache.jackrabbit.oak.plugins.document.util.UTF8Encoder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -1008,15 +1009,18 @@ public class RDBDocumentStoreJDBC {
     }
 
     private static void setIdInStatement(RDBTableMetaData tmd, PreparedStatement stmt, int idx, String id) throws SQLException {
-        if (tmd.isIdBinary()) {
-            try {
-                stmt.setBytes(idx, id.getBytes("UTF-8"));
-            } catch (UnsupportedEncodingException ex) {
-                LOG.error("UTF-8 not supported??", ex);
-                throw new DocumentStoreException(ex);
+        try {
+            if (tmd.isIdBinary()) {
+                stmt.setBytes(idx, UTF8Encoder.encodeAsByteArray(id));
+            } else {
+                if (!UTF8Encoder.canEncode(id)) {
+                    throw new IOException("can not encode as UTF-8");
+                }
+                stmt.setString(idx, id);
             }
-        } else {
-            stmt.setString(idx, id);
+        } catch (IOException ex) {
+            LOG.warn("Invalid ID: " + id, ex);
+            throw new DocumentStoreException("Invalid ID: " + id, ex);
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java?rev=1824459&r1=1824458&r2=1824459&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java Fri Feb 16 12:52:28 2018
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.plugin
 import static com.google.common.collect.Iterables.cycle;
 import static com.google.common.collect.Iterables.limit;
 
-import java.io.UnsupportedEncodingException;
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
@@ -39,6 +39,7 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
+import org.apache.jackrabbit.oak.plugins.document.util.UTF8Encoder;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Joiner;
@@ -406,15 +407,18 @@ public class RDBJDBCTools {
             @Override
             public int setParameters(PreparedStatement stmt, int startIndex) throws SQLException {
                 for (String value : values) {
-                    if (binary) {
-                        try {
-                            stmt.setBytes(startIndex++, value.getBytes("UTF-8"));
-                        } catch (UnsupportedEncodingException ex) {
-                            LOG.error("UTF-8 not supported??", ex);
-                            throw new DocumentStoreException(ex);
+                    try {
+                        if (binary) {
+                            stmt.setBytes(startIndex++, UTF8Encoder.encodeAsByteArray(value));
+                        } else {
+                            if (!UTF8Encoder.canEncode(value)) {
+                                throw new IOException("can not encode as UTF-8");
+                            }
+                            stmt.setString(startIndex++, value);
                         }
-                    } else {
-                        stmt.setString(startIndex++, value);
+                    } catch (IOException ex) {
+                        LOG.warn("Invalid ID: " + value, ex);
+                        throw new DocumentStoreException("Invalid ID: " + value, ex);
                     }
                 }
                 return startIndex;

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1824459&r1=1824458&r2=1824459&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java Fri Feb 16 12:52:28 2018
@@ -36,7 +36,6 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -679,7 +678,6 @@ public class BasicDocumentStoreTest exte
     }
 
     @Test
-    @Ignore("OAK-7261")
     public void testInterestingInvalidIds() {
         // see OAK-7261
         assumeTrue("fails on MongoDocumentStore, see OAK-7271", !(dsf instanceof DocumentStoreFixture.MongoFixture));