Don't copy more than the object size

If the loader's stream is broken and returns to us more content
than it originally declared as the size of the object, don't
copy that onto the output stream.  Instead throw EOFException
and abort fast.  This way we don't follow an infinite stream,
but instead will at least stop when the size was reached.

Change-Id: I7ec0c470c875f03b1f12a74a9b4d2f6e73b659bb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce 2010-08-24 12:59:10 -07:00
parent b474de1da3
commit 7cfe2f12ff
1 changed files with 3 additions and 3 deletions

View File

@ -169,14 +169,14 @@ public void copyTo(OutputStream out) throws MissingObjectException,
final long sz = in.getSize();
byte[] tmp = new byte[1024];
long copied = 0;
for (;;) {
while (copied < sz) {
int n = in.read(tmp);
if (n < 0)
break;
throw new EOFException();
out.write(tmp, 0, n);
copied += n;
}
if (copied != sz)
if (0 <= in.read())
throw new EOFException();
} finally {
in.close();