Bug in JDBC driver w/BLOBs

From: Tristan Tarrant <tristan(dot)tarrant(at)dataforte(dot)net>
To: pgsql-jdbc <pgsql-jdbc(at)postgresql(dot)org>
Subject: Bug in JDBC driver w/BLOBs
Date: 2005-06-21 15:41:56
Message-ID: 1119368516.30387.23.camel@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Dear all,

first of all I would like to thank all you hard-working postgresql JDBC
hackers: I have been using your work for quite a while, and I appreciate
what you do.

Now the bad news: I believe I have found a bug in the pgsql jdbc driver
regarding read access of BLOBs. According to Sun's JDBC documentation,
BLOBs are 1-based, but the driver makes the assumption they are 0-based.
Here is the excerpt from javadoc:

public byte[] getBytes(long pos, int length)

throws SQLException

Retrieves all or part of the BLOB value that this Blob object
represents, as an array of bytes. This byte array contains up to
length consecutive bytes starting at position pos.

Parameters:
pos - the ordinal position of the first byte in the BLOB value
to be extracted; the first byte is at position 1
length - the number of consecutive bytes to be copied

After patching org/postgresql/jdbc2/AbstractJdbc2Blob.java (I am using
the 8.0 311 sources) as follows:

--- AbstractJdbc2Blob.java~ 2005-06-21 17:11:20.000000000 +0200
+++ AbstractJdbc2Blob.java 2005-06-21 17:11:20.000000000 +0200
@@ -38,7 +38,7 @@

public byte[] getBytes(long pos, int length) throws SQLException
{
- lo.seek((int)pos, LargeObject.SEEK_SET);
+ lo.seek((int)(pos-1), LargeObject.SEEK_SET);
return lo.read(length);
}

everything works as advertised.
Am I right ? Am I completely wrong ?

Let me know.

Tristan

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Kris Jurka 2005-06-21 15:56:51 Re: Bug in JDBC driver w/BLOBs
Previous Message Dave Cramer 2005-06-21 13:21:15 Re: problem with types in new jdbc driver