[libpostgresql-jdbc-java] 04/07: Add checks to prevent ResultSet.updateXXX methods from throwing an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions from here.
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:19:15 UTC 2017
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to tag REL8_0_313
in repository libpostgresql-jdbc-java.
commit 8ad9c49deb271508e8b003cc23ed57ed6b46a440
Author: Kris Jurka <books at ejurka.com>
Date: Thu Sep 29 22:12:16 2005 +0000
Add checks to prevent ResultSet.updateXXX methods from throwing
an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions
from here.
---
org/postgresql/jdbc2/AbstractJdbc2ResultSet.java | 34 +++++++---------------
.../test/jdbc2/UpdateableResultTest.java | 22 +++++++++++++-
2 files changed, 32 insertions(+), 24 deletions(-)
diff --git a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
index 8bc379d..8aba6d6 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
@@ -3,7 +3,7 @@
* Copyright (c) 2003-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java,v 1.71.2.3 2005/05/08 23:52:00 jurka Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java,v 1.71.2.4 2005/06/08 01:48:14 oliver Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1034,8 +1034,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateBoolean(int columnIndex, boolean x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating boolean " + fields[columnIndex - 1].getColumnName(connection) + "=" + x);
updateValue(columnIndex, new Boolean(x));
}
@@ -1100,8 +1098,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateDouble(int columnIndex, double x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating double " + fields[columnIndex - 1].getColumnName(connection) + "=" + x);
updateValue(columnIndex, new Double(x));
}
@@ -1109,8 +1105,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateFloat(int columnIndex, float x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating float " + fields[columnIndex - 1].getColumnName(connection) + "=" + x);
updateValue(columnIndex, new Float(x));
}
@@ -1118,8 +1112,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateInt(int columnIndex, int x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating int " + fields[columnIndex - 1].getColumnName(connection) + "=" + x);
updateValue(columnIndex, new Integer(x));
}
@@ -1127,8 +1119,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateLong(int columnIndex, long x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating long " + fields[columnIndex - 1].getColumnName(connection) + "=" + x);
updateValue(columnIndex, new Long(x));
}
@@ -1136,6 +1126,7 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateNull(int columnIndex)
throws SQLException
{
+ checkColumnIndex(columnIndex);
String columnTypeName = connection.getPGType(fields[columnIndex - 1].getOID());
updateValue(columnIndex, new NullObject(columnTypeName));
}
@@ -1144,8 +1135,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateObject(int columnIndex, Object x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating object " + fields[columnIndex - 1].getColumnName(connection) + " = " + x);
updateValue(columnIndex, x);
}
@@ -1336,8 +1325,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateShort(int columnIndex, short x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("in update Short " + fields[columnIndex - 1].getColumnName(connection) + " = " + x);
updateValue(columnIndex, new Short(x));
}
@@ -1345,8 +1332,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateString(int columnIndex, String x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("in update String " + fields[columnIndex - 1].getColumnName(connection) + " = " + x);
updateValue(columnIndex, x);
}
@@ -1354,8 +1339,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateTime(int columnIndex, Time x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("in update Time " + fields[columnIndex - 1].getColumnName(connection) + " = " + x);
updateValue(columnIndex, x);
}
@@ -1363,8 +1346,6 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
public synchronized void updateTimestamp(int columnIndex, Timestamp x)
throws SQLException
{
- if ( Driver.logDebug )
- Driver.debug("updating Timestamp " + fields[columnIndex - 1].getColumnName(connection) + " = " + x);
updateValue(columnIndex, x);
}
@@ -2457,14 +2438,18 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
throw new PSQLException(GT.tr("This ResultSet is closed."), PSQLState.CONNECTION_DOES_NOT_EXIST);
}
+ protected void checkColumnIndex(int column) throws SQLException
+ {
+ if ( column < 1 || column > fields.length )
+ throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(column), new Integer(fields.length)}), PSQLState.INVALID_PARAMETER_VALUE );
+ }
+
protected void checkResultSet( int column ) throws SQLException
{
checkClosed();
if ( this_row == null )
throw new PSQLException(GT.tr("ResultSet not positioned properly, perhaps you need to call next."),
PSQLState.INVALID_CURSOR_STATE);
- if ( column < 1 || column > fields.length )
- throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(column), new Integer(fields.length)}), PSQLState.INVALID_PARAMETER_VALUE );
}
//----------------- Formatting Methods -------------------
@@ -2686,6 +2671,9 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
throw new PSQLException(GT.tr("Cannot update the ResultSet because it is either before the start or after the end of the results."),
PSQLState.INVALID_CURSOR_STATE);
}
+
+ checkColumnIndex(columnIndex);
+
doingUpdates = !onInsertRow;
if (value == null)
updateNull(columnIndex);
diff --git a/org/postgresql/test/jdbc2/UpdateableResultTest.java b/org/postgresql/test/jdbc2/UpdateableResultTest.java
index 78f1a18..4e47a76 100644
--- a/org/postgresql/test/jdbc2/UpdateableResultTest.java
+++ b/org/postgresql/test/jdbc2/UpdateableResultTest.java
@@ -3,7 +3,7 @@
* Copyright (c) 2001-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
-* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java,v 1.19 2005/01/27 22:07:40 oliver Exp $
+* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java,v 1.19.2.1 2005/03/23 19:48:18 jurka Exp $
*
*-------------------------------------------------------------------------
*/
@@ -397,4 +397,24 @@ public class UpdateableResultTest extends TestCase
fail("expected an exception when calling moveToInsertRow() on a read-only resultset");
} catch (SQLException e) {}
}
+
+ public void testBadColumnIndexes() throws Exception
+ {
+ Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ ResultSet rs = st.executeQuery( "select * from updateable");
+ rs.moveToInsertRow();
+ try {
+ rs.updateInt(0,1);
+ fail("Should have thrown an exception on bad column index.");
+ } catch (SQLException sqle) { }
+ try {
+ rs.updateString(1000,"hi");
+ fail("Should have thrown an exception on bad column index.");
+ } catch (SQLException sqle) { }
+ try {
+ rs.updateNull(1000);
+ fail("Should have thrown an exception on bad column index.");
+ } catch (SQLException sqle) { }
+ }
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git
More information about the pkg-java-commits
mailing list