You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Paulex Yang (JIRA)" <ji...@apache.org> on 2006/12/05 18:08:23 UTC
[jira] Updated: (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
[ http://issues.apache.org/jira/browse/HARMONY-2427?page=all ]
Paulex Yang updated HARMONY-2427:
---------------------------------
Summary: [classlib][archive] [compatibility] Harmony checks correctness of java.util.zip.GZIPInputStream.read(BII) arguments even if EOF was reached but RI returns -1 (was: [luni] [compatibility] Harmony checks correctness of java.util.zip.GZIPInputStream.read(BII) arguments even if EOF was reached but RI returns -1)
> [classlib][archive] [compatibility] Harmony checks correctness of java.util.zip.GZIPInputStream.read(BII) arguments even if EOF was reached but RI returns -1
> -------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HARMONY-2427
> URL: http://issues.apache.org/jira/browse/HARMONY-2427
> Project: Harmony
> Issue Type: Bug
> Components: Classlib
> Reporter: Artem Aliev
> Priority: Minor
>
> According to J2SE API 5.0 specifications of java.lang.zip.GZIPInputStream
> class:
> public int read(byte[] buf, int off, int len) throws IOException
> Returns:
> the actual number of bytes read, or -1 if the end of the compressed input
> stream is reached
> Specification of overriden read method from IputStream class says that
> method read throws IndexOutOdBoundsException when off or len is negative and
> when off + len is greater than buffer length.
> When the end of input stream was reached then RI returns -1 and does not
> compare off+len with buf.length and does not check that off and len are
> positive.
> But Harmony verifies arguments even if EOF was reached and throws
> ArrayIndexOutOfBoundsException when off or len is negative, or when off+len is
> greater than array length.
> Harmony unit test
> unitHarmony_org_apache_harmony_archive_tests_java_util_zip_GZIPInputStreamTest
> (test_read$BII)
> verifies that ArrayIndexOfBoundsException should be thrown after EOF if
> off_len > buf.length.
> This test fails on RI.
> Code for reproducing:
> To reproduce this run the following test:
> --------------HT7.java--------------
> import java.util.*;
> import java.io.*;
> import java.net.*;
> import java.util.zip.*;
> public class HT7 {
> public static void main (String[] args) {
> byte outBuf[] = new byte[100];
> try {
> int result = 0;
> URL gInput = new URL("file:hyts_gInput.txt.gz");
> GZIPInputStream inGZIP = new GZIPInputStream(
> gInput.openConnection().getInputStream());
> try {
> inGZIP.read(outBuf, 100, 1);
> System.out.println("Test failedL IOOBE was not thrown");
> return;
> } catch (IndexOutOfBoundsException e) {
> System.out.println(e + " was thrown as expected");
> }
> while (true) {
> result = inGZIP.read(outBuf, 0,5);
> if (result == -1) {
> System.out.println("EOF was reached");
> break;
> }
> }
> result = -10;
> try {
> result = inGZIP.read(outBuf, 100, 1);
> System.out.println("Test passed. After EOF read(buf,100,1) ==
> "+result);
> } catch (IndexOutOfBoundsException e) {
> System.out.println("Test failed. After EOF read(buf, 100,1)
> throws: "+e);
> }
> try {
> result = inGZIP.read(outBuf, -100, 1);
> System.out.println("Test passed. After EOF read(buf,-100,1) ==
> "+result);
> } catch (IndexOutOfBoundsException e) {
> System.out.println("Test failed. After EOF read(buf,-100,1)
> throws: "+e);
> }
> try {
> result = inGZIP.read(outBuf, -1, 1);//100, 1);
> System.out.println("Test passed. After EOF read(buf,1,-1) ==
> "+result);
> } catch (IndexOutOfBoundsException e) {
> System.out.println("Test failed. After EOF read(buf,1,-1)
> throws: "+e);
> }
> } catch (IOException e) {
> e.printStackTrace();
> }
> }
> }
> -------------------
> Steps to Reproduce:
> Create HT7 class and run it
> java -cp . HT7
> Output:
> On RI:
> java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> java.lang.IndexOutOfBoundsException was thrown as expected
> EOF was reached
> Test passed. After EOF read(buf,100,1) == -1
> Test passed. After EOF read(buf,-100,1) == -1
> Test passed. After EOF read(buf,1,-1) == -1
> On Harmony:
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software
> Foundation or its l
> icensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = rsvn: '.' is not a working copy, (Sep 22 2006), Windows/ia32/msvc 1310,
> debug build
> http://incubator.apache.org/harmony
> java.lang.ArrayIndexOutOfBoundsException was thrown as expected
> EOF was reached
> Test failed. After EOF read(buf, 100,1) throws:
> java.lang.ArrayIndexOutOfBoundsException
> Test failed. After EOF read(buf,-100,1) throws:
> java.lang.ArrayIndexOutOfBoundsException
> Test failed. After EOF read(buf,1,-1) throws:
> java.lang.ArrayIndexOutOfBoundsException
--
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