@ -114,8 +114,13 @@ public class UnpackedObjectLoader extends ObjectLoader {
int avail = 0 ;
int avail = 0 ;
while ( ! inflater . finished ( ) & & avail < hdr . length )
while ( ! inflater . finished ( ) & & avail < hdr . length )
try {
try {
avail + = inflater . inflate ( hdr , avail , hdr . length
int uncompressed = inflater . inflate ( hdr , avail ,
- avail ) ;
hdr . length - avail ) ;
if ( uncompressed = = 0 ) {
throw new CorruptObjectException ( id ,
"bad stream, corrupt header" ) ;
}
avail + = uncompressed ;
} catch ( DataFormatException dfe ) {
} catch ( DataFormatException dfe ) {
final CorruptObjectException coe ;
final CorruptObjectException coe ;
coe = new CorruptObjectException ( id , "bad stream" ) ;
coe = new CorruptObjectException ( id , "bad stream" ) ;
@ -172,8 +177,14 @@ public class UnpackedObjectLoader extends ObjectLoader {
private void decompress ( final AnyObjectId id , final Inflater inf , int p )
private void decompress ( final AnyObjectId id , final Inflater inf , int p )
throws CorruptObjectException {
throws CorruptObjectException {
try {
try {
while ( ! inf . finished ( ) )
while ( ! inf . finished ( ) ) {
p + = inf . inflate ( bytes , p , objectSize - p ) ;
int uncompressed = inf . inflate ( bytes , p , objectSize - p ) ;
p + = uncompressed ;
if ( uncompressed = = 0 & & ! inf . finished ( ) ) {
throw new CorruptObjectException ( id ,
"bad stream, corrupt header" ) ;
}
}
} catch ( DataFormatException dfe ) {
} catch ( DataFormatException dfe ) {
final CorruptObjectException coe ;
final CorruptObjectException coe ;
coe = new CorruptObjectException ( id , "bad stream" ) ;
coe = new CorruptObjectException ( id , "bad stream" ) ;