You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Elena Sayapina (JIRA)" <ji...@apache.org> on 2007/05/17 06:24:16 UTC

[jira] Commented: (HARMONY-3703) [classlib][archive][netbeans] GZIPInputStream throws IOException when feeding from the network

    [ https://issues.apache.org/jira/browse/HARMONY-3703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12496467 ] 

Elena Sayapina commented on HARMONY-3703:
-----------------------------------------

The following piece of code fails on Harmony-r538054, Harmony-r538431, but passes on Harmony-r537771:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class gzipTest {

            public static void main(String[] args) {

                GZIPInputStream gis = null;
                int result = 0;

                try {

                        byte[] buffer = new byte[] {1,2,3,4,5,6,7,8,9,10};
                        OutputStream out = new FileOutputStream("gzip");
                        System.out.println("Open GZIPOutputStream");
                        GZIPOutputStream gout = new GZIPOutputStream(out);
                        System.out.println("Write 100 bytes into GZIPOutputStream");
                        for(int i = 0; i < 10; i++) {
                                    gout.write(buffer);
                        }
                        System.out.println("Finish GZIPOutputStream");
                        gout.finish();
                        System.out.println("Open GZIPOutputStream");
                        gout = new GZIPOutputStream(out);
                        System.out.println("Close GZIPOutputStream");
                        gout.close();

                        System.out.println("Open GZIPInputStream");
                        gis = new GZIPInputStream(new FileInputStream("gzip"));
                        buffer = new byte[100];
                        System.out.println("Read 100 bytes from GZIPInputStream");
                        result = gis.read(buffer);

                        System.out.println("Read EOF");
                        result = gis.read();
                        gis.close();
                        if (result == -1) {
                                   System.out.println("TEST PASSED: result = " + result);
                        } else {
                                   System.out.println("TEST FAILED: result = " + result);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("TEST FAILED: unexpected " + e);
                }
            }
}

 
Output on Harmony-r538054:

Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors,
as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r538054, (May 15 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony

Open GZIPOutputStream
Write 100 bytes into GZIPOutputStream
Finish GZIPOutputStream
Open GZIPOutputStream
Close GZIPOutputStream
Open GZIPInputStream
Read 100 bytes from GZIPInputStream
Read EOF
java.io.IOException: Crc mismatch
        at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:161)
        at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:104)
        at gzipTest.main(gzipTest.java:38)
TEST FAILED: unexpected java.io.IOException: Crc mismatch

Output on Harmony-r537771:

Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors,
as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r537771, (May 14 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony

Open GZIPOutputStream
Write 100 bytes into GZIPOutputStream
Finish GZIPOutputStream
Open GZIPOutputStream
Close GZIPOutputStream
Open GZIPInputStream
Read 100 bytes from GZIPInputStream
Read EOF
TEST PASSED: result = -1



> [classlib][archive][netbeans] GZIPInputStream throws IOException when feeding from the network
> ----------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-3703
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3703
>             Project: Harmony
>          Issue Type: Bug
>          Components: App-Oriented Bug Reports, Classlib
>            Reporter: Vasily Zakharov
>         Assigned To: Alexei Zakharov
>         Attachments: H-3703.patch
>
>
> When java.util.zip.GZIPInputStream is passed a stream constructed from a network URL, it throws IOException (Crc mismatch) at end-of-stream. If the same content is fed through local file URL, the problem doesn't occur. It looks like some end-of-stream detection problem is in place, or a race condition.
> public class Test {
>     public static void main(String args[]) throws Exception {
>         byte[] buffer = new byte[0x100000];
>         String url =
>                 "http://www.netbeans.org/updates/55_1.20_.xml.gz";
>                 //"file:55_1.20_.xml.gz";
>         java.io.InputStream stream = new java.util.zip.GZIPInputStream(new java.net.URL(url).openStream());
>         int length = 0, num = 0;
>         while (num >= 0) {
>             length += num;
>             System.out.println(length);
>             num = stream.read(buffer, length, (buffer.length - length));
>         }
>     }
> }
> $ Ri/bin/java -Dhttp.proxyHost=$PROXY_HOST -Dhttp.proxyPort=$PROXY_PORT Test
> 0
> 777
> 3392
> ...
> 386431
> SUCCESS
> $ HY/bin/java -Dhttp.proxyHost=$PROXY_HOST -Dhttp.proxyPort=$PROXY_PORT Test
> 0
> 777
> 3392
> ...
> 386431
> Exception in thread "main" java.io.IOException: Crc mismatch
>         at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:166)
>         at Test.main(Test.java:13)
> On IBM VM, this result is stable. On DRLVM, the test sometimes (rarely) passes, and sometimes (also rarely) another exception occurs instead of IOException:
> Uncaught exception in main:
> java.lang.ArrayIndexOutOfBoundsException: bad arrayCopy
>         at java.lang.VMMemoryManager.arrayCopy(VMMemoryManager.java)
>         at java.lang.System.arraycopy(System.java:86)
>         at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:161)
>         at Test.main(Test.java:13)
> If content is previously downloaded (wget http://www.netbeans.org/updates/55_1.20_.xml.gz) and local file URL is used instead of network URL (comment line 5, uncomment line 6), output on Harmony becomes identical to output on RI.
> This problem was discovered while trying to run NetBeans on Harmony. 
> Issue HARMONY-3702 was also filed while investigating this one.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.