You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/01/25 10:43:02 UTC

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

Author: pyang
Date: Thu Jan 25 01:42:56 2007
New Revision: 499712

URL: http://svn.apache.org/viewvc?view=rev&rev=499712
Log:
Apply patch for HARMONY-2427( [classlib][archive] [compatibility] Harmony checks correctness of java.util.zip.GZIPInputStream.read(BII) arguments even if EOF was reached but RI returns -1)

Modified:
    harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/GZIPInputStream.java
    harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/GZIPInputStreamTest.java
    harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterInputStreamTest.java

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/GZIPInputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/GZIPInputStream.java?view=diff&rev=499712&r1=499711&r2=499712
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/GZIPInputStream.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/zip/GZIPInputStream.java Thu Jan 25 01:42:56 2007
@@ -133,6 +133,12 @@
 	 */
 	@Override
     public int read(byte[] buffer, int off, int nbytes) throws IOException {
+        if (closed) {
+            throw new IOException(Messages.getString("archive.1E")); //$NON-NLS-1$
+        }
+        if(eof){
+            return -1;
+        }
 		// avoid int overflow, check null buffer
 		if (off <= buffer.length && nbytes >= 0 && off >= 0
 				&& buffer.length - off >= nbytes) {

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/GZIPInputStreamTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/GZIPInputStreamTest.java?view=diff&rev=499712&r1=499711&r2=499712
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/GZIPInputStreamTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/GZIPInputStreamTest.java Thu Jan 25 01:42:56 2007
@@ -99,104 +99,120 @@
 	/**
 	 * @tests java.util.zip.GZIPInputStream#read(byte[], int, int)
 	 */
-	public void test_read$BII() {
+	public void test_read$BII() throws IOException {
 		// test method java.util.zip.GZIPInputStream.readBII
-		byte orgBuf[] = { '3', '5', '2', 'r', 'g', 'e', 'f', 'd', 'e', 'w' };
-		byte outBuf[] = new byte[100];
-		try {
-			int result = 0;
-			Support_Resources.copyFile(resources, "GZIPInputStream",
-					"hyts_gInput.txt.gz");
-			String resPath = resources.toString();
-			if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') {
-                resPath = resPath.substring(1);
-            }
-			final URL gInput = new URL("file:/" + resPath
-					+ "/GZIPInputStream/hyts_gInput.txt.gz");
-			TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
-					.openConnection().getInputStream());
-			while (!(inGZIP.endofInput())) {
-				result += inGZIP.read(outBuf, result, outBuf.length - result);
-			}
-			assertEquals("the checkSum value of the compressed and decompressed data does not equal",
-					2074883667L, inGZIP.getChecksum().getValue());
-			for (int i = 0; i < orgBuf.length; i++) {
-				assertTrue(
-						"the decompressed data does not equal the original data decompressed",
-						orgBuf[i] == outBuf[i]);
-				// System.out.println(orgBuf[i] + " " + outBuf[i]);
-			}
-			int r = 0;
-			try {
-				inGZIP.read(outBuf, 100, 1);
-			} catch (ArrayIndexOutOfBoundsException e) {
-				r = 1;
-			}
-			inGZIP.close();
-			assertEquals("Boundary Check was not present", 1, r);
-		} catch (IOException e) {
-			e.printStackTrace();
-			fail("unexpected: " + e);
-		}
+        byte orgBuf[] = { '3', '5', '2', 'r', 'g', 'e', 'f', 'd', 'e', 'w' };
+        byte outBuf[] = new byte[100];
+        int result = 0;
+        Support_Resources.copyFile(resources, "GZIPInputStream",
+                "hyts_gInput.txt.gz");
+        String resPath = resources.toString();
+        if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') {
+            resPath = resPath.substring(1);
+        }
+        final URL gInput = new URL("file:/" + resPath
+                + "/GZIPInputStream/hyts_gInput.txt.gz");
+        TestGZIPInputStream inGZIP = new TestGZIPInputStream(gInput
+                .openConnection().getInputStream());
+        while (!(inGZIP.endofInput())) {
+            result += inGZIP.read(outBuf, result, outBuf.length - result);
+        }
+        assertEquals(
+                "the checkSum value of the compressed and decompressed data does not equal",
+                2074883667L, inGZIP.getChecksum().getValue());
+        for (int i = 0; i < orgBuf.length; i++) {
+            assertTrue(
+                    "the decompressed data does not equal the original data decompressed",
+                    orgBuf[i] == outBuf[i]);
+            // System.out.println(orgBuf[i] + " " + outBuf[i]);
+        }
+        int r = 0;
+        try {
+            inGZIP.read(outBuf, 100, 1);
+        } catch (IndexOutOfBoundsException e) {
+            r = 1;
+        }
+        inGZIP.close();
+        // line below fails on RI also, comment out.
+        // assertEquals("Boundary Check was not present", 1, r);
 
-		try {
-			// Create compressed data which is exactly 512 bytes (after the
-			// header),
-			// the size of the InflaterStream internal buffer
-			byte[] test = new byte[507];
-			for (int i = 0; i < 256; i++) {
-                test[i] = (byte) i;
-            }
-			for (int i = 256; i < test.length; i++) {
-                test[i] = (byte) (256 - i);
-            }
-			ByteArrayOutputStream bout = new ByteArrayOutputStream();
-			GZIPOutputStream out = new GZIPOutputStream(bout);
-			out.write(test);
-			out.close();
-			byte[] comp = bout.toByteArray();
-			GZIPInputStream gin2 = new GZIPInputStream(
-					new ByteArrayInputStream(comp), 512);
-			int result, total = 0;
-			while ((result = gin2.read(test)) != -1) {
-                total += result;
-            }
-			assertEquals("Should return -1", -1, gin2.read());
-			gin2.close();
-			assertTrue("Incorrectly decompressed", total == test.length);
+        // Create compressed data which is exactly 512 bytes (after the
+        // header),
+        // the size of the InflaterStream internal buffer
+        byte[] test = new byte[507];
+        for (int i = 0; i < 256; i++) {
+            test[i] = (byte) i;
+        }
+        for (int i = 256; i < test.length; i++) {
+            test[i] = (byte) (256 - i);
+        }
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        GZIPOutputStream out = new GZIPOutputStream(bout);
+        out.write(test);
+        out.close();
+        byte[] comp = bout.toByteArray();
+        GZIPInputStream gin2 = new GZIPInputStream(new ByteArrayInputStream(
+                comp), 512);
+        int total = 0;
+        while ((result = gin2.read(test)) != -1) {
+            total += result;
+        }
+        assertEquals("Should return -1", -1, gin2.read());
+        gin2.close();
+        assertTrue("Incorrectly decompressed", total == test.length);
 
-			gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
-			total = 0;
-			while ((result = gin2.read(new byte[200])) != -1) {
-				total += result;
-			}
-			assertEquals("Should return -1", -1, gin2.read());
-			gin2.close();
-			assertTrue("Incorrectly decompressed", total == test.length);
+        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
+        total = 0;
+        while ((result = gin2.read(new byte[200])) != -1) {
+            total += result;
+        }
+        assertEquals("Should return -1", -1, gin2.read());
+        gin2.close();
+        assertTrue("Incorrectly decompressed", total == test.length);
 
-			gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 516);
-			total = 0;
-			while ((result = gin2.read(new byte[200])) != -1) {
-				total += result;
-			}
-			assertEquals("Should return -1", -1, gin2.read());
-			gin2.close();
-			assertTrue("Incorrectly decompressed", total == test.length);
+        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 516);
+        total = 0;
+        while ((result = gin2.read(new byte[200])) != -1) {
+            total += result;
+        }
+        assertEquals("Should return -1", -1, gin2.read());
+        gin2.close();
+        assertTrue("Incorrectly decompressed", total == test.length);
 
-			comp[40] = 0;
-			gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
-			boolean exception = false;
-			try {
-				while (gin2.read(test) != -1) {
-                    ;
-                }
-			} catch (IOException e) {
-				exception = true;
-			}
-			assertTrue("Exception expected", exception);
-		} catch (IOException e) {
-			fail("Unexpected: " + e);
-		}
+        comp[40] = 0;
+        gin2 = new GZIPInputStream(new ByteArrayInputStream(comp), 512);
+        boolean exception = false;
+        try {
+            while (gin2.read(test) != -1) {
+                ;
+            }
+        } catch (IOException e) {
+            exception = true;
+        }
+        assertTrue("Exception expected", exception);
+        
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        GZIPOutputStream zipout = new GZIPOutputStream(baos);
+        zipout.write(test);
+        zipout.close();
+        outBuf = new byte[530];
+        GZIPInputStream in= new GZIPInputStream(new ByteArrayInputStream(baos.toByteArray()));
+        try {
+            in.read(outBuf, 530, 1);
+            fail("Test failed IOOBE was not thrown");
+        } catch (IndexOutOfBoundsException e) {
+        }
+        while (true) {
+            result = in.read(outBuf, 0, 5);
+            if (result == -1) {
+                //"EOF was reached";
+                break;
+            }
+        }
+        result = -10;
+        result = in.read(null, 100, 1);
+        result = in.read(outBuf, -100, 1);
+        result = in.read(outBuf, -1, 1);// 100, 1);
 	}
 
 	/**

Modified: harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterInputStreamTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterInputStreamTest.java?view=diff&rev=499712&r1=499711&r2=499712
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterInputStreamTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/test/java/org/apache/harmony/archive/tests/java/util/zip/InflaterInputStreamTest.java Thu Jan 25 01:42:56 2007
@@ -17,8 +17,11 @@
 package org.apache.harmony.archive.tests.java.util.zip;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.zip.DeflaterOutputStream;
 import java.util.zip.Inflater;
 import java.util.zip.InflaterInputStream;
 
@@ -158,8 +161,35 @@
 	/**
 	 * @tests java.util.zip.InflaterInputStream#read(byte[], int, int)
 	 */
-	public void test_read$BII() {
-		// TODO
+	public void test_read$BII() throws IOException{
+        byte[] test = new byte[507];
+        for (int i = 0; i < 256; i++) {
+            test[i] = (byte) i;
+        }
+        for (int i = 256; i < test.length; i++) {
+            test[i] = (byte) (256 - i);
+        }
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        DeflaterOutputStream dos = new DeflaterOutputStream(baos);
+        dos.write(test);
+        dos.close();
+        InputStream is = new ByteArrayInputStream(baos.toByteArray());
+        InflaterInputStream iis = new InflaterInputStream(is);
+        byte[] outBuf = new byte[530];
+        int result = 0;
+        while (true) {
+            result = iis.read(outBuf, 0, 5);
+            if (result == -1) {
+                //"EOF was reached";
+                break;
+            }
+        }
+        try {
+            iis.read(outBuf, -1, 10);
+            fail("should throw IOOBE.");
+        } catch (IndexOutOfBoundsException e) {
+            // expected;
+        }
 	}
 
     /**