diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/UnpackedObjectLoader.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/UnpackedObjectLoader.java index 005df4b98..96a1f8024 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/UnpackedObjectLoader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/UnpackedObjectLoader.java @@ -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");