Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
1.3
-
None
-
None
-
Linux and Windows
Description
When reading a file through BZip2CompressorInputStream, and the user selects a file of the wrong type (such as ZIP or GZIP), the read blows up with a strange ArrayIndexOutOfBoundException, instead of reporting immediately that the input data is of the wrong format.
The Bzip2Compressor should be able to identify whether a stream is of BZip2 format or not, and immediately reject it with a meaningful exception (example: "ProtocolException: not a BZip2 compressed file").
Alternatively, are there functions in commons-compress that can identify the compression type of an InputStream by inspection?
Example stack trace when using a ZIP input file:
Exception in thread "OSM Decompressor" java.lang.ArrayIndexOutOfBoundsException: 900000
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.getAndMoveToFrontDecode(BZip2CompressorInputStream.java:688)
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.initBlock(BZip2CompressorInputStream.java:322)
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.setupNoRandPartA(BZip2CompressorInputStream.java:880)
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.setupNoRandPartB(BZip2CompressorInputStream.java:936)
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.read0(BZip2CompressorInputStream.java:228)
at org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream.read(BZip2CompressorInputStream.java:180)
at java.io.InputStream.read(InputStream.java:82)
at org.ka2ddo.yaac.osm.OsmXmlSegmenter$1.run(OsmXmlSegmenter.java:129)
at java.lang.Thread.run(Thread.java:680)