Author: bodewig
Date: Fri Feb 20 16:18:00 2015
New Revision: 1661151
URL: http://svn.apache.org/r1661151
Log:
return 0 from read when asked to read 0 bytes - COMPRESS-309
Modified:
commons/proper/compress/trunk/src/changes/changes.xml
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
Modified: commons/proper/compress/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1661151&r1=1661150&r2=1661151&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Fri Feb 20 16:18:00
2015
@@ -54,6 +54,11 @@ breaks backwards compatibility for code
This also changes the superclass of ZCompressorInputStream.
">
+ <action issue="COMPRESS-309" type="fix"
+ date="2015-02-20">
+ BZip2CompressorInputStream#read would return -1 when asked to
+ read 0 bytes.
+ </action>
<action issue="COMPRESS-306" type="fix">
ArchiveStreamFactory fails to pass on the encoding when creating some
streams.
* ArjArchiveInputStream
Modified:
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java?rev=1661151&r1=1661150&r2=1661151&view=diff
==============================================================================
---
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
(original)
+++
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
Fri Feb 20 16:18:00 2015
@@ -165,6 +165,9 @@ public class BZip2CompressorInputStream
if (this.in == null) {
throw new IOException("stream closed");
}
+ if (len == 0) {
+ return 0;
+ }
final int hi = offs + len;
int destOffs = offs;
Modified:
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java?rev=1661151&r1=1661150&r2=1661151&view=diff
==============================================================================
---
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
(original)
+++
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStreamTest.java
Fri Feb 20 16:18:00 2015
@@ -20,8 +20,11 @@ package org.apache.commons.compress.comp
import static org.apache.commons.compress.AbstractTestCase.getFile;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
+import org.junit.Assert;
import org.junit.Test;
public class BZip2CompressorInputStreamTest {
@@ -36,4 +39,34 @@ public class BZip2CompressorInputStreamT
}
}
+ /**
+ * @see "https://issues.apache.org/jira/browse/COMPRESS-309"
+ */
+ @Test
+ public void readOfLength0ShouldReturn0() throws Exception {
+ // Create a big random piece of data
+ byte[] rawData = new byte[1048576];
+ for (int i=0; i < rawData.length; ++i) {
+ rawData[i] = (byte) Math.floor(Math.random()*256);
+ }
+
+ // Compress it
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ BZip2CompressorOutputStream bzipOut = new
BZip2CompressorOutputStream(baos);
+ bzipOut.write(rawData);
+ bzipOut.flush();
+ bzipOut.close();
+ baos.flush();
+ baos.close();
+
+ // Try to read it back in
+ ByteArrayInputStream bais = new
ByteArrayInputStream(baos.toByteArray());
+ BZip2CompressorInputStream bzipIn = new
BZip2CompressorInputStream(bais);
+ byte[] buffer = new byte[1024];
+ Assert.assertEquals(1024, bzipIn.read(buffer, 0, 1024));
+ Assert.assertEquals(0, bzipIn.read(buffer, 1024, 0));
+ Assert.assertEquals(1024, bzipIn.read(buffer, 0, 1024));
+ bzipIn.close();
+ }
+
}