[
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