Commit e046e1df authored by Bruce Momjian's avatar Bruce Momjian

The current implementation of BlobInputStream does

not properly handle 8-bit unsigned data as it blindly
casts the byte to an int, which java most helpfully
promotes to a signed type.  This causes problems when
you can only return -1 to indicated EOF.

The following patch fixes the bug and has been tested
locally on image data.

Chad David
parent dbb219b8
......@@ -58,16 +58,24 @@ public class BlobInputStream extends InputStream {
*/
public int read() throws java.io.IOException {
try {
if(buffer==null || bpos>=buffer.length) {
if (buffer == null || bpos >= buffer.length) {
buffer=lo.read(bsize);
bpos=0;
}
// Handle EOF
if(bpos>=buffer.length)
if(bpos >= buffer.length) {
return -1;
}
int ret = (buffer[bpos] & 0x7F);
if ((buffer[bpos] &0x80) == 0x80) {
ret |= 0x80;
}
return (int) buffer[bpos++];
bpos++;
return ret;
} catch(SQLException se) {
throw new IOException(se.toString());
}
......@@ -152,5 +160,4 @@ public class BlobInputStream extends InputStream {
public boolean markSupported() {
return true;
}
}
\ No newline at end of file
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment