dfs: handle short copies
`copy` is documented as possibly returning a smaller number of bytes than requested. In practice, this can occur if a block is cached and the reader never pulls in the file to check its size. Bug: 565874 Change-Id: I1e53b3d2f4ab09334178934dc0ef74ea99045cd3 Signed-off-by: wh <wh9692@protonmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
27fbd8bf56
commit
a14455dfd7
|
@ -607,9 +607,16 @@ private IOException packfileIsTruncated() {
|
||||||
|
|
||||||
private void readFully(long position, byte[] dstbuf, int dstoff, int cnt,
|
private void readFully(long position, byte[] dstbuf, int dstoff, int cnt,
|
||||||
DfsReader ctx) throws IOException {
|
DfsReader ctx) throws IOException {
|
||||||
if (ctx.copy(this, position, dstbuf, dstoff, cnt) != cnt)
|
while (cnt > 0) {
|
||||||
|
int copied = ctx.copy(this, position, dstbuf, dstoff, cnt);
|
||||||
|
if (copied == 0) {
|
||||||
throw new EOFException();
|
throw new EOFException();
|
||||||
}
|
}
|
||||||
|
position += copied;
|
||||||
|
dstoff += copied;
|
||||||
|
cnt -= copied;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ObjectLoader load(DfsReader ctx, long pos)
|
ObjectLoader load(DfsReader ctx, long pos)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
Loading…
Reference in New Issue