|
|
@ -335,39 +335,36 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator { |
|
|
|
|
|
|
|
|
|
|
|
private InputStream possiblyFilteredInputStream(final Entry e, |
|
|
|
private InputStream possiblyFilteredInputStream(final Entry e, |
|
|
|
final InputStream is, final long len) throws IOException { |
|
|
|
final InputStream is, final long len) throws IOException { |
|
|
|
InputStream filteredIs; |
|
|
|
|
|
|
|
if (!mightNeedCleaning()) { |
|
|
|
if (!mightNeedCleaning()) { |
|
|
|
filteredIs = is; |
|
|
|
|
|
|
|
canonLen = len; |
|
|
|
canonLen = len; |
|
|
|
} else { |
|
|
|
return is; |
|
|
|
if (len <= MAXIMUM_FILE_SIZE_TO_READ_FULLY) { |
|
|
|
} |
|
|
|
ByteBuffer rawbuf = IO.readWholeStream(is, (int) len); |
|
|
|
|
|
|
|
byte[] raw = rawbuf.array(); |
|
|
|
if (len <= MAXIMUM_FILE_SIZE_TO_READ_FULLY) { |
|
|
|
int n = rawbuf.limit(); |
|
|
|
ByteBuffer rawbuf = IO.readWholeStream(is, (int) len); |
|
|
|
if (!isBinary(raw, n)) { |
|
|
|
byte[] raw = rawbuf.array(); |
|
|
|
rawbuf = filterClean(raw, n); |
|
|
|
int n = rawbuf.limit(); |
|
|
|
raw = rawbuf.array(); |
|
|
|
if (!isBinary(raw, n)) { |
|
|
|
n = rawbuf.limit(); |
|
|
|
rawbuf = filterClean(raw, n); |
|
|
|
} |
|
|
|
raw = rawbuf.array(); |
|
|
|
filteredIs = new ByteArrayInputStream(raw, 0, n); |
|
|
|
n = rawbuf.limit(); |
|
|
|
canonLen = n; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if (isBinary(e)) { |
|
|
|
|
|
|
|
filteredIs = is; |
|
|
|
|
|
|
|
canonLen = len; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
final InputStream lenIs = filterClean(e |
|
|
|
|
|
|
|
.openInputStream()); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
canonLen = computeLength(lenIs); |
|
|
|
|
|
|
|
} finally { |
|
|
|
|
|
|
|
safeClose(lenIs); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
filteredIs = filterClean(is); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
canonLen = n; |
|
|
|
|
|
|
|
return new ByteArrayInputStream(raw, 0, n); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isBinary(e)) { |
|
|
|
|
|
|
|
canonLen = len; |
|
|
|
|
|
|
|
return is; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final InputStream lenIs = filterClean(e.openInputStream()); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
canonLen = computeLength(lenIs); |
|
|
|
|
|
|
|
} finally { |
|
|
|
|
|
|
|
safeClose(lenIs); |
|
|
|
} |
|
|
|
} |
|
|
|
return filteredIs; |
|
|
|
return filterClean(is); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static void safeClose(final InputStream in) { |
|
|
|
private static void safeClose(final InputStream in) { |
|
|
|