Changeset: 2233b172e06d for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/2233b172e06d
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetConnection.java
        src/main/java/org/monetdb/jdbc/MonetStatement.java
        tests/JDBC_API_Tester.java
Branch: default
Log Message:

Add checks for sql String parameter to prevent NullPointerException or 
executing an empty sql String.


diffs (211 lines):

diff --git a/src/main/java/org/monetdb/jdbc/MonetConnection.java 
b/src/main/java/org/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java
@@ -770,6 +770,10 @@ public class MonetConnection
                throws SQLException
        {
                checkNotClosed();
+
+               if (sql == null || sql.isEmpty())
+                       throw new SQLException("Missing SQL statement", 
"M1M05");
+
                try {
                        final CallableStatement ret = new 
MonetCallableStatement(
                                this,
@@ -875,6 +879,10 @@ public class MonetConnection
                throws SQLException
        {
                checkNotClosed();
+
+               if (sql == null || sql.isEmpty())
+                       throw new SQLException("Missing SQL statement", 
"M1M05");
+
                try {
                        final PreparedStatement ret = new 
MonetPreparedStatement(
                                this,
diff --git a/src/main/java/org/monetdb/jdbc/MonetStatement.java 
b/src/main/java/org/monetdb/jdbc/MonetStatement.java
--- a/src/main/java/org/monetdb/jdbc/MonetStatement.java
+++ b/src/main/java/org/monetdb/jdbc/MonetStatement.java
@@ -138,6 +138,9 @@ public class MonetStatement
         */
        @Override
        public void addBatch(final String sql) throws SQLException {
+               if (sql == null || sql.isEmpty())
+                       throw new SQLException("Missing SQL statement", 
"M1M05");
+
                if (batch == null) {
                        // create the ArrayList at first time use
                        batch = new ArrayList<String>();
@@ -438,6 +441,9 @@ public class MonetStatement
                        lastResponseList = null;
                }
 
+               if (sql == null || sql.isEmpty())
+                       throw new SQLException("Missing SQL statement", 
"M1M05");
+
                if (queryTimeout != connection.lastSetQueryTimeout) {
                        // set requested/changed queryTimeout on the server 
side first
                        connection.setQueryTimeout(queryTimeout);
@@ -1285,6 +1291,8 @@ public class MonetStatement
                        final BatchUpdateException e)
                throws BatchUpdateException
        {
+               if (batch.length() == 0)
+                       return false;
                try {
                        long count = -1;
                        boolean hasResultSet = 
internalExecute(batch.toString());
diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -66,6 +66,7 @@ final public class JDBC_API_Tester {
                jt.Test_Ctransaction();
                jt.Test_Dobjects();
                jt.Test_DBCmetadata();
+               jt.Test_EmptySql();
                jt.Test_FetchSize();
                jt.Test_Int128();
                jt.Test_Interval_Types();
@@ -1385,6 +1386,142 @@ final public class JDBC_API_Tester {
                compareExpectedOutput("Test_Dmetadata", "");
        }
 
+       private void Test_EmptySql() {
+               sb.setLength(0);        // clear the output log buffer
+
+               Statement stmt = null;
+               try {
+                       stmt = con.createStatement();
+               } catch (SQLException e) {
+                       sb.append("FAILED: 
").append(e.getMessage()).append("\n");
+               }
+
+               try {
+                       stmt.execute(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       stmt.execute("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+
+               try {
+                       int ret = stmt.executeUpdate(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       int ret = stmt.executeUpdate("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       long ret = stmt.executeLargeUpdate(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       long ret = stmt.executeLargeUpdate("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       stmt.addBatch(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       stmt.addBatch("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+
+               ResultSet rs = null;
+               try {
+                       rs = stmt.executeQuery(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       rs = stmt.executeQuery("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               closeStmtResSet(stmt, rs);
+
+               PreparedStatement pstmt = null;
+               try {
+                       pstmt = con.prepareStatement(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       pstmt = con.prepareStatement("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       pstmt = con.prepareStatement(null, 
Statement.RETURN_GENERATED_KEYS);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       pstmt = con.prepareStatement("", 
Statement.RETURN_GENERATED_KEYS);
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               closeStmtResSet(pstmt, null);
+
+               CallableStatement cstmt = null;
+               try {
+                       pstmt = con.prepareCall(null);
+                       sb.append("Failed to check null parameter!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               try {
+                       pstmt = con.prepareCall("");
+                       sb.append("Failed to check empty sql string!\n");
+               } catch (SQLException e) {
+                       sb.append(e.getMessage()).append("\n");
+               }
+               closeStmtResSet(cstmt, null);
+
+               compareExpectedOutput("Test_EmptySql",
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n" +
+                       "Missing SQL statement\n");
+       }
+
        private void Test_FetchSize() {
                sb.setLength(0);        // clear the output log buffer
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to