You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "phaphe (JIRA)" <ji...@apache.org> on 2012/08/03 12:07:02 UTC
[jira] [Created] (COMPRESS-198) ZipArchiveInputStream truncates
file in some condition
phaphe created COMPRESS-198:
-------------------------------
Summary: ZipArchiveInputStream truncates file in some condition
Key: COMPRESS-198
URL: https://issues.apache.org/jira/browse/COMPRESS-198
Project: Commons Compress
Issue Type: Bug
Affects Versions: 1.4.1
Reporter: phaphe
ZipArchiveInputStream in some special situation truncates file silently without warning. The problem occurs when the source stream is a stream which does not support mark function and this stream is encapsulated in BufferedInputStream.
This behaviour can be easily reproduced.
The test code:
{code:title=Test.java|borderStyle=solid}
/**
* Unzips test file and demonstrates the problem.
*
*
*/
public class Test {
/**
* Silly Stream.
* It simulates situation, when mark function is not supported.
*
*/
public static class SillyStream extends InputStream {
FileInputStream source;
public SillyStream(FileInputStream source) {
this.source = source;
}
@Override
public int read() throws IOException {
return source.read();
}
@Override
public void close() throws IOException {
source.close();
}
}
public static void main(String[] args) throws IOException {
File exportDirectory = new File("out");
FileInputStream fis = new FileInputStream("test.zip");
//encapsulating with silly stream to simulate situation when mark function is not supported
SillyStream ss = new SillyStream(fis);
//encapsulating with buffered stream - Buffered stream supports mark function
BufferedInputStream bs = new BufferedInputStream(ss,30000);
ZipArchiveInputStream zip = new ZipArchiveInputStream(bs);
ZipArchiveEntry entry;
while ((entry = zip.getNextZipEntry()) != null) {
File newFile = new File(
exportDirectory.getAbsolutePath() + "/"
+ entry.getName());
if (entry.isDirectory()) {
createDir(newFile);
continue;
}
createFile(newFile);
FileOutputStream fos = new FileOutputStream(newFile);
BufferedOutputStream bfos = new BufferedOutputStream(
fos);
//Buffered input stream is necessary there to simulate the
//problem
InputStream is = new BufferedInputStream(zip);
int ch;
//silly reading byte by byte
while((ch = is.read()) != -1) {
bfos.write(ch);
}
bfos.flush();
bfos.close();
}
zip.close();
}
private static void createFile(File file) throws IOException {
System.out.println("File:" + file.getAbsolutePath());
File parent = file.getParentFile();
parent.mkdirs();
file.createNewFile();
}
private static void createDir(File file) throws IOException {
System.out.println("Dir:" + file.getAbsolutePath());
file.mkdirs();
}
}
{code}
The test file is there (300MB):
http://uloz.to/x9kJLrt/test-zip
The ZIP file was created by common compress.
The problem can be found in file txt/1_0050.tif.txt. The real size is 4300 bytes but after decompress with java code it has only 4240 bytes.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (COMPRESS-198) ZipArchiveInputStream truncates
file in some condition
Posted by "Sebb (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/COMPRESS-198?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13429040#comment-13429040 ]
Sebb commented on COMPRESS-198:
-------------------------------
Cannot access the test file; please attach the smallest possible example to the issue.
Or, better yet, create the sample from the source tree as part of the test case.
Not sure the code example makes much sense.
The ZipArchiveInputStream stream already buffers internally.
It does not make sense to wrap it in a BufferedInputStream for each file.
> ZipArchiveInputStream truncates file in some condition
> ------------------------------------------------------
>
> Key: COMPRESS-198
> URL: https://issues.apache.org/jira/browse/COMPRESS-198
> Project: Commons Compress
> Issue Type: Bug
> Affects Versions: 1.4.1
> Reporter: phaphe
>
> ZipArchiveInputStream in some special situation truncates file silently without warning. The problem occurs when the source stream is a stream which does not support mark function and this stream is encapsulated in BufferedInputStream.
> This behaviour can be easily reproduced.
> The test code:
> {code:title=Test.java|borderStyle=solid}
> /**
> * Unzips test file and demonstrates the problem.
> *
> *
> */
> public class Test {
> /**
> * Silly Stream.
> * It simulates situation, when mark function is not supported.
> *
> */
> public static class SillyStream extends InputStream {
> FileInputStream source;
>
> public SillyStream(FileInputStream source) {
> this.source = source;
> }
> @Override
> public int read() throws IOException {
> return source.read();
> }
>
> @Override
> public void close() throws IOException {
> source.close();
> }
> }
> public static void main(String[] args) throws IOException {
> File exportDirectory = new File("out");
>
> FileInputStream fis = new FileInputStream("test.zip");
> //encapsulating with silly stream to simulate situation when mark function is not supported
> SillyStream ss = new SillyStream(fis);
> //encapsulating with buffered stream - Buffered stream supports mark function
> BufferedInputStream bs = new BufferedInputStream(ss,30000);
>
> ZipArchiveInputStream zip = new ZipArchiveInputStream(bs);
> ZipArchiveEntry entry;
> while ((entry = zip.getNextZipEntry()) != null) {
> File newFile = new File(
> exportDirectory.getAbsolutePath() + "/"
> + entry.getName());
> if (entry.isDirectory()) {
> createDir(newFile);
> continue;
> }
> createFile(newFile);
> FileOutputStream fos = new FileOutputStream(newFile);
> BufferedOutputStream bfos = new BufferedOutputStream(
> fos);
>
> //Buffered input stream is necessary there to simulate the
> //problem
> InputStream is = new BufferedInputStream(zip);
> int ch;
>
> //silly reading byte by byte
> while((ch = is.read()) != -1) {
> bfos.write(ch);
> }
>
> bfos.flush();
> bfos.close();
> }
> zip.close();
> }
> private static void createFile(File file) throws IOException {
> System.out.println("File:" + file.getAbsolutePath());
>
> File parent = file.getParentFile();
> parent.mkdirs();
>
> file.createNewFile();
> }
>
> private static void createDir(File file) throws IOException {
> System.out.println("Dir:" + file.getAbsolutePath());
> file.mkdirs();
> }
> }
> {code}
> The test file is there (300MB):
> http://uloz.to/x9kJLrt/test-zip
> The ZIP file was created by common compress.
> The problem can be found in file txt/1_0050.tif.txt. The real size is 4300 bytes but after decompress with java code it has only 4240 bytes.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Resolved] (COMPRESS-198) ZipArchiveInputStream truncates
file in some condition
Posted by "Sebb (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/COMPRESS-198?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sebb resolved COMPRESS-198.
---------------------------
Resolution: Cannot Reproduce
No response.
> ZipArchiveInputStream truncates file in some condition
> ------------------------------------------------------
>
> Key: COMPRESS-198
> URL: https://issues.apache.org/jira/browse/COMPRESS-198
> Project: Commons Compress
> Issue Type: Bug
> Affects Versions: 1.4.1
> Reporter: phaphe
>
> ZipArchiveInputStream in some special situation truncates file silently without warning. The problem occurs when the source stream is a stream which does not support mark function and this stream is encapsulated in BufferedInputStream.
> This behaviour can be easily reproduced.
> The test code:
> {code:title=Test.java|borderStyle=solid}
> /**
> * Unzips test file and demonstrates the problem.
> *
> *
> */
> public class Test {
> /**
> * Silly Stream.
> * It simulates situation, when mark function is not supported.
> *
> */
> public static class SillyStream extends InputStream {
> FileInputStream source;
>
> public SillyStream(FileInputStream source) {
> this.source = source;
> }
> @Override
> public int read() throws IOException {
> return source.read();
> }
>
> @Override
> public void close() throws IOException {
> source.close();
> }
> }
> public static void main(String[] args) throws IOException {
> File exportDirectory = new File("out");
>
> FileInputStream fis = new FileInputStream("test.zip");
> //encapsulating with silly stream to simulate situation when mark function is not supported
> SillyStream ss = new SillyStream(fis);
> //encapsulating with buffered stream - Buffered stream supports mark function
> BufferedInputStream bs = new BufferedInputStream(ss,30000);
>
> ZipArchiveInputStream zip = new ZipArchiveInputStream(bs);
> ZipArchiveEntry entry;
> while ((entry = zip.getNextZipEntry()) != null) {
> File newFile = new File(
> exportDirectory.getAbsolutePath() + "/"
> + entry.getName());
> if (entry.isDirectory()) {
> createDir(newFile);
> continue;
> }
> createFile(newFile);
> FileOutputStream fos = new FileOutputStream(newFile);
> BufferedOutputStream bfos = new BufferedOutputStream(
> fos);
>
> //Buffered input stream is necessary there to simulate the
> //problem
> InputStream is = new BufferedInputStream(zip);
> int ch;
>
> //silly reading byte by byte
> while((ch = is.read()) != -1) {
> bfos.write(ch);
> }
>
> bfos.flush();
> bfos.close();
> }
> zip.close();
> }
> private static void createFile(File file) throws IOException {
> System.out.println("File:" + file.getAbsolutePath());
>
> File parent = file.getParentFile();
> parent.mkdirs();
>
> file.createNewFile();
> }
>
> private static void createDir(File file) throws IOException {
> System.out.println("Dir:" + file.getAbsolutePath());
> file.mkdirs();
> }
> }
> {code}
> The test file is there (300MB):
> http://uloz.to/x9kJLrt/test-zip
> The ZIP file was created by common compress.
> The problem can be found in file txt/1_0050.tif.txt. The real size is 4300 bytes but after decompress with java code it has only 4240 bytes.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira