You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Svetlana Samoilenko (JIRA)" <ji...@apache.org> on 2006/02/13 12:20:00 UTC

[jira] Updated: (HARMONY-89) java.util.jar.Manifest().read(InputStream is) throws OutOfMemoryError

     [ http://issues.apache.org/jira/browse/HARMONY-89?page=all ]

Svetlana Samoilenko updated HARMONY-89:
---------------------------------------

    Attachment: fix.txt

> java.util.jar.Manifest().read(InputStream is) throws OutOfMemoryError
> ---------------------------------------------------------------------
>
>          Key: HARMONY-89
>          URL: http://issues.apache.org/jira/browse/HARMONY-89
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Svetlana Samoilenko
>  Attachments: fix.txt
>
> Synopsis: java.util.jar.Manifest().read(InputStream is) throws OutOfMemoryError 
> Description: For test listed below BEA throws IOException while Harmony throws OutOfMemoryError. 
> The test creates an instance of InputStreamImpl  where read method is implemented in simple way and returned any integer value, in particular in.available()== 0 and  in.read(buf) == buf.length.
> There is no checking for this conditions  in the InitManifest.readLines method  and as a result an endless loop occurs.
> Suggested fix in attachment may be incomplete, needs additional investigation.
> Code to reproduce: 
> import java.util.jar.*; 
> import java.io.*; 
>  
> public class test2 { 
>     public static void main(String args[]) { 
>         InputStream is = new InputStreamImpl(); 
>     try { 
>         new Manifest().read(is); 
>     } catch (IOException e) { 
>          e.printStackTrace(); 
>          System.out.println("PASSED"); 
>     }     
>   } 
> }
> class InputStreamImpl extends InputStream{        
>         public InputStreamImpl() { 
>                 super(); 
>         } 
>         public int read() { 
>                 return 0; 
>         } 
> } 
> Steps to Reproduce: 
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
> 2. Compile test2.java using BEA 1.4 javac 
> > javac -d . test2.java 
> 3. Run java using compatible VM (J9) 
> > java -showversion test2
> Output: 
> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
> java version "1.4.2_04" 
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
> java.io.IOException: line too long
>         at java.util.jar.Attributes.read(Ljava.util.jar.Manifest$FastInputStream;[B)V(Attributes.java:356)
>         at java.util.jar.Manifest.read(Ljava.io.InputStream;)V(Manifest.java:167)
>         at test2.main([Ljava.lang.String;)V(test2.java:8)
> PASSED
> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
> java.lang.OutOfMemoryError
>         at java.util.jar.InitManifest.readLines(InitManifest.java:224)
>         at java.util.jar.InitManifest.<init>(InitManifest.java:61)
>         at java.util.jar.Manifest.read(Manifest.java:273)
>         at test2.main(test2.java:10)
> Suggested junit test case:
> ------------------------ ManifestTest.java ------------------------------------------------- 
> import junit.framework.*; 
> import java.io.*;
> import java.util.jar.Manifest; 
> public class ManifestTest extends TestCase { 
>     public static void main(String[] args) { 
>         junit.textui.TestRunner.run(ManifestTest.class); 
>     } 
>     public void test_read () { 
>         InputStream is = new InputStreamImpl(); 
>         try { 
>            new Manifest().read(is); 
>         } catch (IOException e) { 
>           //expected 
>         }     
>     } 
> }
> class InputStreamImpl extends InputStream 
>         
>     public InputStreamImpl() { 
>         super(); 
>     } 
>     public int read() { 
>         return 0; 
>     } 
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira