You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by li...@apache.org on 2006/12/12 06:59:58 UTC

svn commit: r486042 - in /harmony/enhanced/classlib/trunk/modules/archive/src: main/java/java/util/zip/Inflater.java test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java

Author: liangyx
Date: Mon Dec 11 21:59:57 2006
New Revision: 486042

URL: http://svn.apache.org/viewvc?view=rev&rev=486042
Log:
HARMONY-2510 ([classlib][archive]Inflater.inflate fails to throw DataFormatException while the uncompression method is not acceptable.)

Modified:
    harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/Inflater.java
    harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/Inflater.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/Inflater.java?view=diff&rev=486042&r1=486041&r2=486042
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/Inflater.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/Inflater.java Mon Dec 11 21:59:57 2006
@@ -45,7 +45,11 @@
 	static {
 		oneTimeInitialization();
 	}
-
+    
+    private static final byte MAGIC_NUMBER = 120;
+    private boolean gotFirstByte = false;
+    private boolean pass_magic_number_check = true;
+    
 	/**
 	 * Release any resources associated with this Inflater. Any unused
 	 * input/output is discarded. This is also called by the finalize method.
@@ -175,6 +179,10 @@
                 throw new IllegalStateException();
             }
             
+            if (!pass_magic_number_check) {
+                throw new DataFormatException();
+            }
+
             if (needsInput()) {
                 return 0;
             }
@@ -310,6 +318,12 @@
 			setInputImpl(buf, off, nbytes, streamHandle);
 		} else {
             throw new ArrayIndexOutOfBoundsException();
+        }
+        
+        if(!gotFirstByte && nbytes>0)
+        {
+           pass_magic_number_check = (buf[off] == MAGIC_NUMBER || nbytes > 1);           
+           gotFirstByte = true;
         }
 	}
 

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java?view=diff&rev=486042&r1=486041&r2=486042
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterTest.java Mon Dec 11 21:59:57 2006
@@ -717,6 +717,18 @@
         Inflater inflater = new Inflater();
         byte[] b = new byte[1024];
         assertEquals(0, inflater.inflate(b));
-        inflater.end();       
-    }
+        inflater.end();
+        
+        // Regression for HARMONY-2510
+        inflater = new Inflater();
+        byte[] input = new byte[] { -1 };
+        inflater.setInput(input);
+        try {
+            inflater.inflate(b);
+            fail("should throw DataFormateException");
+        } catch (DataFormatException e) {
+            // expected
+        }       
+    }   
+    
 }