Patrik Burkhalter created COMPRESS-270:
------------------------------------------
Summary: TarArchiveInputStream fails to read PAX header from
InputStream
Key: COMPRESS-270
URL: https://issues.apache.org/jira/browse/COMPRESS-270
Project: Commons Compress
Issue Type: Bug
Components: Archivers
Affects Versions: 1.8
Reporter: Patrik Burkhalter
We have a scenario with a "slow" {{InputStream}} and are facing
{{IOExceptions}} with {{TarArchiveEntry#getNextTarEntry()}}.
If the {{InputStream}} does not deliver fast enough,
{{TarArchiveEntry#parsePaxHeaders(InputStream i)}} fails at this location:
{code:title=TarArchiveInputStream.java|borderStyle=solid}
// Get rest of entry
byte[] rest = new byte[len - read];
int got = i.read(rest);
if (got != len - read){
throw new IOException("Failed to read "
+ "Paxheader. Expected "
+ (len - read)
+ " bytes, read "
+ got);
}
{code}
We would suggest to change the code to something like this:
{code:title=TarArchiveInputStream.java|borderStyle=solid}
// Get rest of entry
byte[] rest = new byte[len - read];
byte[] buffer = new byte[len - read];
int got = 0;
int destPos = 0;
while((got = i.read(buffer)) != -1) {
System.arraycopy(buffer, 0, rest, destPos, got);
destPos += got;
}
if (destPos != len - read){
throw new IOException("Failed to read "
+ "Paxheader. Expected "
+ (len - read)
+ " bytes, read "
+ destPos);
}
{code}
This would make sure, that it gets all bytes of the PAX header value.
--
This message was sent by Atlassian JIRA
(v6.2#6252)