mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-01 19:45:33 +08:00
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
This commit is contained in:
parent
dbb219b896
commit
e046e1dfab
@ -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;
|
||||
}
|
||||
|
||||
return (int) buffer[bpos++];
|
||||
int ret = (buffer[bpos] & 0x7F);
|
||||
if ((buffer[bpos] &0x80) == 0x80) {
|
||||
ret |= 0x80;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user