From: Barry Lind Date: Mon, 30 Jun 2003 16:38:30 +0000 (+0000) Subject: Patches applied: X-Git-Tag: REL7_4_BETA1~263 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9af05a9d10807fda418163e69074881d8f4ffb9d;p=postgresql Patches applied: 1) Patch from Kris Jurka to fix IPv6 parsing of the jdbc URL 2) Patch from Kris Jurka to fix an ArrayIndexOutOfBounds error when calling moveToCurrentRow while currentRow is "beforeFirst" 3) Patch from Kim Ho to fix add some bounds checking in setMaxRows(), setQueryTimeout(), setFetchSize() Modified Files: jdbc/org/postgresql/Driver.java.in jdbc/org/postgresql/errors.properties jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java --- diff --git a/src/interfaces/jdbc/org/postgresql/Driver.java.in b/src/interfaces/jdbc/org/postgresql/Driver.java.in index e37428491a..96754e5b84 100644 --- a/src/interfaces/jdbc/org/postgresql/Driver.java.in +++ b/src/interfaces/jdbc/org/postgresql/Driver.java.in @@ -6,7 +6,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Attic/Driver.java.in,v 1.30 2003/05/29 04:39:51 barry Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Attic/Driver.java.in,v 1.31 2003/06/30 16:38:30 barry Exp $ * *------------------------------------------------------------------------- */ @@ -272,6 +272,17 @@ public class Driver implements java.sql.Driver l_urlArgs = url.substring(l_qPos+1); } + // look for an IPv6 address that is enclosed by [] + // the upcoming parsing that uses colons as identifiers can't handle + // the colons in an IPv6 address. + int ipv6start = l_urlServer.indexOf("["); + int ipv6end = l_urlServer.indexOf("]"); + String ipv6address = null; + if (ipv6start != -1 && ipv6end > ipv6start) { + ipv6address = l_urlServer.substring(ipv6start+1,ipv6end); + l_urlServer = l_urlServer.substring(0,ipv6start)+"ipv6host"+l_urlServer.substring(ipv6end+1); + } + //parse the server part of the url StringTokenizer st = new StringTokenizer(l_urlServer, ":/", true); for (int count = 0; (st.hasMoreTokens()); count++) @@ -346,6 +357,10 @@ public class Driver implements java.sql.Driver } } + // if we extracted an IPv6 address out earlier put it back + if (ipv6address != null) + urlProps.put("PGHOST",ipv6address); + //parse the args part of the url StringTokenizer qst = new StringTokenizer(l_urlArgs, "&"); for (int count = 0; (qst.hasMoreTokens()); count++) diff --git a/src/interfaces/jdbc/org/postgresql/errors.properties b/src/interfaces/jdbc/org/postgresql/errors.properties index d75ca97e9d..b3f6e1ad21 100644 --- a/src/interfaces/jdbc/org/postgresql/errors.properties +++ b/src/interfaces/jdbc/org/postgresql/errors.properties @@ -97,3 +97,6 @@ postgresql.call.funcover:Cannot execute Query a call to setXXX (1, ..) was made postgresql.call.wrongget:Parameter of type {0} was registered but call to get{1} (sqltype={2}) was made. postgresql.call.noreturnval:A CallableStatement Function was executed with nothing returned. postgresql.call.wrongrtntype:A CallableStatement Function was executed and the return was of type ({0}) however type={1} was registered. +postgresql.input.fetch.gt0:Fetch size must be a value greater than or equal to 0. +postgresql.input.query.gt0:Query Timeout must be a value greater than or equal to 0. +postgresql.input.rows.gt0:Maximum number of rows must be a value greater than or equal to 0. diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java index 93d4fcae33..c3d7af2513 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java @@ -25,7 +25,7 @@ import java.sql.Timestamp; import java.sql.Types; import java.util.Vector; -/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.24 2003/05/29 04:52:44 barry Exp $ +/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.25 2003/06/30 16:38:30 barry Exp $ * This class defines methods of the jdbc1 specification. This class is * extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2 * methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement @@ -554,6 +554,7 @@ public abstract class AbstractJdbc1Statement implements BaseStatement */ public void setMaxRows(int max) throws SQLException { + if (max<0) throw new PSQLException("postgresql.input.rows.gt0"); maxrows = max; } @@ -590,6 +591,7 @@ public abstract class AbstractJdbc1Statement implements BaseStatement */ public void setQueryTimeout(int seconds) throws SQLException { + if (seconds<0) throw new PSQLException("postgresql.input.query.gt0"); timeout = seconds; } diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java index 2151423502..2f0ad3cb27 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java @@ -9,7 +9,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.19 2003/05/03 20:40:45 barry Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.20 2003/06/30 16:38:30 barry Exp $ * *------------------------------------------------------------------------- */ @@ -687,10 +687,15 @@ public abstract class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.Abstra throw new PSQLException( "postgresql.updateable.notupdateable" ); } - this_row = (byte[][]) rows.elementAt(current_row); + if (current_row < 0) { + this_row = null; + rowBuffer = null; + } else { + this_row = (byte[][]) rows.elementAt(current_row); - rowBuffer = new byte[this_row.length][]; - System.arraycopy(this_row, 0, rowBuffer, 0, this_row.length); + rowBuffer = new byte[this_row.length][]; + System.arraycopy(this_row, 0, rowBuffer, 0, this_row.length); + } onInsertRow = false; doingUpdates = false; diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java index 510cc4242b..2512a9790e 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java @@ -9,7 +9,7 @@ import org.postgresql.Driver; import org.postgresql.largeobject.*; import org.postgresql.util.PSQLException; -/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2Statement.java,v 1.14 2003/05/29 04:52:44 barry Exp $ +/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2Statement.java,v 1.15 2003/06/30 16:38:30 barry Exp $ * This class defines methods of the jdbc2 specification. This class extends * org.postgresql.jdbc1.AbstractJdbc1Statement which provides the jdbc1 * methods. The real Statement class (for jdbc2) is org.postgresql.jdbc2.Jdbc2Statement @@ -151,6 +151,7 @@ public abstract class AbstractJdbc2Statement extends org.postgresql.jdbc1.Abstra public void setFetchSize(int rows) throws SQLException { + if (rows<0) throw new PSQLException("postgresql.input.fetch.gt0"); super.fetchSize = rows; }