[
https://issues.apache.org/jira/browse/COMPRESS-309?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Bodewig resolved COMPRESS-309.
-------------------------------------
Resolution: Fixed
Fix Version/s: 1.10
fixed with svn revision 1661151 - thanks!
> BZip2CompressorInputStream return value wrong when told to read to a full
> buffer.
> ---------------------------------------------------------------------------------
>
> Key: COMPRESS-309
> URL: https://issues.apache.org/jira/browse/COMPRESS-309
> Project: Commons Compress
> Issue Type: Bug
> Components: Compressors
> Affects Versions: 1.4.1, 1.9
> Reporter: Nathan Kronenfeld
> Labels: bzip2, compression
> Fix For: 1.10
>
>
> BZip2CompressorInputStream.read(buffer, offset, length) returns -1 when given
> an offset equal to the length of the buffer.
> This indicates, not that the buffer was full, but that the stream was
> finished.
> It seems like a pretty stupid thing to do - but I'm getting this when trying
> to use Kryo serialization (which is probably a bug on their part, too), so it
> does occur and has negative affects.
> Here's a JUnit test that shows the problem specifically:
> {noformat}
> @Test
> public void testApacheCommonsBZipUncompression () 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];
> // Works fine
> Assert.assertEquals(1024, bzipIn.read(buffer, 0, 1024));
> // Fails, returns -1 (indicating the stream is complete rather
> than that the buffer
> // was full)
> Assert.assertEquals(0, bzipIn.read(buffer, 1024, 0));
> // But if you change the above expected value to -1, the
> following line still works
> Assert.assertEquals(1024, bzipIn.read(buffer, 0, 1024));
> bzipIn.close();
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)