Fix handling of corruption for truncated objects
If a loose object was corrupted by truncation, JGit would hang. Change-Id: I7e4c14f44183a5fcb37c1562e81682bddeba80ad Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
This commit is contained in:
parent
23583e59bb
commit
c10e134157
|
@ -114,8 +114,13 @@ private UnpackedObjectLoader(final byte[] compressed, final AnyObjectId id)
|
|||
int avail = 0;
|
||||
while (!inflater.finished() && avail < hdr.length)
|
||||
try {
|
||||
avail += inflater.inflate(hdr, avail, hdr.length
|
||||
- avail);
|
||||
int uncompressed = inflater.inflate(hdr, avail,
|
||||
hdr.length - avail);
|
||||
if (uncompressed == 0) {
|
||||
throw new CorruptObjectException(id,
|
||||
"bad stream, corrupt header");
|
||||
}
|
||||
avail += uncompressed;
|
||||
} catch (DataFormatException dfe) {
|
||||
final CorruptObjectException coe;
|
||||
coe = new CorruptObjectException(id, "bad stream");
|
||||
|
@ -172,8 +177,14 @@ private UnpackedObjectLoader(final byte[] compressed, final AnyObjectId id)
|
|||
private void decompress(final AnyObjectId id, final Inflater inf, int p)
|
||||
throws CorruptObjectException {
|
||||
try {
|
||||
while (!inf.finished())
|
||||
p += inf.inflate(bytes, p, objectSize - p);
|
||||
while (!inf.finished()) {
|
||||
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) {
|
||||
final CorruptObjectException coe;
|
||||
coe = new CorruptObjectException(id, "bad stream");
|
||||
|
|
Loading…
Reference in New Issue