You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bu...@apache.org on 2008/09/18 20:09:07 UTC
DO NOT REPLY [Bug 45836] New: [PATCH] For correct empty
CBzip2OutputStream handling
https://issues.apache.org/bugzilla/show_bug.cgi?id=45836
Summary: [PATCH] For correct empty CBzip2OutputStream handling
Product: Ant
Version: 1.8Alpha (nightly)
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Other
AssignedTo: notifications@ant.apache.org
ReportedBy: tommay@google.com
Created an attachment (id=22604)
--> (https://issues.apache.org/bugzilla/attachment.cgi?id=22604)
Patch to fix empty CBzip2OutputStream
In 1.7.1, creating and then closing a CBzip2OutputStream without writing any
dya to it would incorrectly result in an ArithmeticException being thrown (bug
32200). The code in svn has been modified so this no longer happens. However,
the resulting compressed output is no longer valid and won't decompress with
bunzip2 after prepending "BZ" to the stream.
Here's a patch against the code in svn that fixes the problem correctly as far
as I can tell.
Here's a test program:
$ cat X.java
import org.apache.tools.bzip2.CBZip2OutputStream;
class X {
public static void main(String[] args) throws Exception {
new CBZip2OutputStream(System.out).close();
}
}
Example incorrect 1.7.1 behavior:
$ java X
Exception in thread "main" java.lang.ArithmeticException: / by zero
at
org.apache.tools.bzip2.CBZip2OutputStream.mainSort(CBZip2OutputStream.java:1135)
at
org.apache.tools.bzip2.CBZip2OutputStream.doReversibleTransformation(CBZip2OutputStream.java:1347)
at
org.apache.tools.bzip2.CBZip2OutputStream.endBlock(CBZip2OutputStream.java:438)
at
org.apache.tools.bzip2.CBZip2OutputStream.close(CBZip2OutputStream.java:389)
at X.main(X.java:5)
Example incorrect behavior of current code:
$ (echo -n "BZ"; java X) | bunzip2
bunzip2: Data integrity error when decompressing.
Input file = (stdin), output file = (stdout)
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
Behavior with this patch applied, bunzip2 creates zero-length output as
expected:
$ (echo -n "BZ"; java -cp .:/tmp/ant-svn/src/main X) | bunzip2 | wc -c
0
Note that last is set to -1 only in initBlock() which is called only from the
constructor and from writeRun(). However, after initBlock() is called from
writeRun(), writeRun() calls itself again and last is guaranteed not to be -1
afterwards. Therefore my last == -1 check is true only if the stream is empty,
and in all other cases the behavior is not changed.
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
DO NOT REPLY [Bug 45836] [PATCH] For correct empty
CBzip2OutputStream handling
Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=45836
Stefan Bodewig <bo...@apache.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Target Milestone|--- |1.8.0
--- Comment #1 from Stefan Bodewig <bo...@apache.org> 2008-09-19 08:05:11 PST ---
patch committed as svn revision 697122, thanks!
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.