[PATCHES] BlobInputStream.java patch

Started by Chad Davidover 25 years ago3 messagespatches
Jump to latest
#1Chad David
davidc@lodge.guild.ab.ca

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
Guild Software Inc.
davidc@guild.ab.ca

*** BlobInputStream.java    Thu Feb 22 11:11:23 2001
--- BlobInputStream.patched Thu Feb 22 11:10:38 2001
***************
*** 58,73 ****
     */
    public int read() throws java.io.IOException {
      try {
!       if(buffer==null || bpos>=buffer.length) {
          buffer=lo.read(bsize);
          bpos=0;
        }

// Handle EOF
! if(bpos>=buffer.length)
return -1;

!       return (int) buffer[bpos++];
      } catch(SQLException se) {
        throw new IOException(se.toString());
      }
--- 58,81 ----
     */
    public int read() throws java.io.IOException {
      try {
!       if (buffer == null || bpos >= buffer.length) {
          buffer=lo.read(bsize);
          bpos=0;
        }

// Handle EOF
! if(bpos >= buffer.length) {
return -1;
+ }

! int ret = (buffer[bpos] & 0x7F);
! if ((buffer[bpos] &0x80) == 0x80) {
! ret |= 0x80;
! }
!
! bpos++;
!
! return ret;
} catch(SQLException se) {
throw new IOException(se.toString());
}
***************
*** 153,156 ****
return true;
}

! }
--- 161,164 ----
    return true;
      }

! }

--ELM989802762-2250-0_--

#2Bruce Momjian
bruce@momjian.us
In reply to: Chad David (#1)
Re: [PATCHES] BlobInputStream.java patch

Peter, can you comment on this?

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
Guild Software Inc.
davidc@guild.ab.ca

*** BlobInputStream.java    Thu Feb 22 11:11:23 2001
--- BlobInputStream.patched Thu Feb 22 11:10:38 2001
***************
*** 58,73 ****
*/
public int read() throws java.io.IOException {
try {
!       if(buffer==null || bpos>=buffer.length) {
buffer=lo.read(bsize);
bpos=0;
}

// Handle EOF
! if(bpos>=buffer.length)
return -1;

!       return (int) buffer[bpos++];
} catch(SQLException se) {
throw new IOException(se.toString());
}
--- 58,81 ----
*/
public int read() throws java.io.IOException {
try {
!       if (buffer == null || bpos >= buffer.length) {
buffer=lo.read(bsize);
bpos=0;
}

// Handle EOF
! if(bpos >= buffer.length) {
return -1;
+ }

! int ret = (buffer[bpos] & 0x7F);
! if ((buffer[bpos] &0x80) == 0x80) {
! ret |= 0x80;
! }
!
! bpos++;
!
! return ret;
} catch(SQLException se) {
throw new IOException(se.toString());
}
***************
*** 153,156 ****
return true;
}

! }
--- 161,164 ----
return true;
}

! }

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#3Bruce Momjian
bruce@momjian.us
In reply to: Chad David (#1)
Re: BlobInputStream.java patch

Thanks. Patch applied for 7.2.

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
Guild Software Inc.
davidc@guild.ab.ca

*** BlobInputStream.java    Thu Feb 22 11:11:23 2001
--- BlobInputStream.patched Thu Feb 22 11:10:38 2001
***************
*** 58,73 ****
*/
public int read() throws java.io.IOException {
try {
!       if(buffer==null || bpos>=buffer.length) {
buffer=lo.read(bsize);
bpos=0;
}

// Handle EOF
! if(bpos>=buffer.length)
return -1;

!       return (int) buffer[bpos++];
} catch(SQLException se) {
throw new IOException(se.toString());
}
--- 58,81 ----
*/
public int read() throws java.io.IOException {
try {
!       if (buffer == null || bpos >= buffer.length) {
buffer=lo.read(bsize);
bpos=0;
}

// Handle EOF
! if(bpos >= buffer.length) {
return -1;
+ }

! int ret = (buffer[bpos] & 0x7F);
! if ((buffer[bpos] &0x80) == 0x80) {
! ret |= 0x80;
! }
!
! bpos++;
!
! return ret;
} catch(SQLException se) {
throw new IOException(se.toString());
}
***************
*** 153,156 ****
return true;
}

! }
--- 161,164 ----
return true;
}

! }

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026