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;
|
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 @@ private UnpackedObjectLoader(final byte[] compressed, final AnyObjectId id)
|
||||||
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");
|
||||||
|
|
Loading…
Reference in New Issue