Thread: BUG #1449: JDBC client driver bug waiting to happen

BUG #1449: JDBC client driver bug waiting to happen

From
"Michael Robinton"
Date:
The following bug has been logged online:

Bug reference:      1449
Logged by:          Michael Robinton
Email address:      michael@insulin-pumpers.org
PostgreSQL version: 7.4.6
Operating system:   linux
Description:        JDBC client driver bug waiting to happen
Details:

if "int size" is set to 8, there is insufficient storage in "int n" to
accomodate 8 bytes of storage since jave thinks an int is 4 bytes. Since
currently no 8 byte longs are sent, this bug is not apparent.

Michael

/*
         * Receives an integer from the backend
         *
         * @param siz length of the integer in bytes
         * @return the integer received from the backend
         * @exception SQLException if an I/O error occurs
         */
        public int ReceiveInteger(int siz) throws SQLException
        {
                int n = 0;

                try
                {
                        for (int i = 0 ; i < siz ; i++)
                        {
                                int b = pg_input.read();

                                if (b < 0)
                                        throw new
PSQLException("postgresql.stream.eof", PSQLState.COMMUNICATION_ERROR);
                                n = n | (b << (8 * i)) ;

Re: BUG #1449: JDBC client driver bug waiting to happen

From
Kris Jurka
Date:
On Fri, 28 Jan 2005, Michael Robinton wrote:

> The following bug has been logged online:
>
> Bug reference:      1449
> PostgreSQL version: 7.4.6
> Description:        JDBC client driver bug waiting to happen
> Details:
>
> if "int size" is set to 8, there is insufficient storage in "int n" to
> accomodate 8 bytes of storage since jave thinks an int is 4 bytes. Since
> currently no 8 byte longs are sent, this bug is not apparent.
>
> /*
>          * Receives an integer from the backend
>          */
>         public int ReceiveInteger(int siz) throws SQLException
>         {

This is not a bug.  The ReceiveInteger function you are looking at is a
part of the low level protocol code and int size will never be > 4.  It
has nothing to do with how something like ResultSet.getLong() treats
integer values.

Kris Jurka