Harmony
  1. Harmony
  2. HARMONY-1082

[classlib][io]compatibility:java.io.BufferedOutputStream.write(byte[], int, int) throws ArrayIndexOutOfBoundsException while RI throws NullPointerException

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Trivial Trivial
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:
      None
    • Patch Info:
      Patch Available

      Description

      J2SE API specifications for java.io.BufferedOutputStream.write(byte[], int, int) method says "Throws IOException - if an I/O error occurs."
      Spec for the superclass java.io.OutputStream says that "If off is negative, or len is negative, or off+len is greater than the length of the array b, then an IndexOutOfBoundsException is thrown."

      Harmony throws ArrayIndexOutOfBoundsException while RI throws NullPointerException.

      ============== Test9422 .java =====================
      import java.io.BufferedOutputStream;

      public class Test9422 {

      public static void main(String[] argv) {
      BufferedOutputStream localBufferedOutputStream = new BufferedOutputStream(
      null, 1);
      byte[] array0 = new byte[]

      { 2, 2, 2, 2, 2, 2, 2, 2, 2 }

      ;

      try

      { localBufferedOutputStream.write(array0, 127, 1); System.out.println("Test filed!"); }

      catch (IndexOutOfBoundsException e)

      { System.out.println("Test passed: expected " + e); }

      catch (Exception e)

      { System.out.println("Test filed: " + e); }

      try

      { localBufferedOutputStream.write(array0, 5, 17); System.out.println("Test filed!"); }

      catch (IndexOutOfBoundsException e)

      { System.out.println("Test passed: expected " + e); }

      catch (Exception e)

      { System.out.println("Test filed: " + e); }

      try

      { localBufferedOutputStream.write(array0, -1, 5); System.out.println("Test filed!"); }

      catch (IndexOutOfBoundsException e)

      { System.out.println("Test passed: expected " + e); }

      catch (Exception e)

      { System.out.println("Test filed: " + e); }

      try

      { localBufferedOutputStream.write(array0, 1, -5); System.out.println("Test filed!"); }

      catch (IndexOutOfBoundsException e)

      { System.out.println("Test passed: expected " + e); }

      catch (Exception e)

      { System.out.println("Test filed: " + e); }

      }

      }

      ==========================================

      Output:

      Harmony:
      java version "1.5.0"
      pre-alpha : not complete or compatible
      svn = r424571, (Jul 22 2006), Windows/ia32/msvc 1310, release build
      http://incubator.apache.org/harmony

      Test passed: expected java.lang.ArrayIndexOutOfBoundsException: Arguments out of bounds
      Test passed: expected java.lang.ArrayIndexOutOfBoundsException: Arguments out of bounds
      Test passed: expected java.lang.ArrayIndexOutOfBoundsException: Arguments out of bounds
      Test passed: expected java.lang.ArrayIndexOutOfBoundsException: Arguments out of bounds

      RI:
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      BEA WebLogic JRockit(R) (build dra-38972-20041208-2001-win-ia32, R25.0.0-75, GC: System optimized over throughput (initial strategy singleparpar))

      Test filed: java.lang.NullPointerException
      Test filed: java.lang.NullPointerException
      Test filed: java.lang.NullPointerException
      Test passed: expected java.lang.ArrayIndexOutOfBoundsException

      1. harmony-1082.diff
        10 kB
        Tony Wu
      2. Harmony-1082-2.diff
        11 kB
        Ruth Cao

        Activity

        Hide
        Tony Wu added a comment -

        IMO, it is not a non-bug difference.
        In the testcase you have set the bufsize to 1, and when you write anything whose length is greater than 1, it will cause the outputstream to write something instead of just buffer it. so the NPE will be through firstly. It is reasonable.
        I'll post a patch for that.

        Show
        Tony Wu added a comment - IMO, it is not a non-bug difference. In the testcase you have set the bufsize to 1, and when you write anything whose length is greater than 1, it will cause the outputstream to write something instead of just buffer it. so the NPE will be through firstly. It is reasonable. I'll post a patch for that.
        Hide
        Tony Wu added a comment -

        patch available

        Show
        Tony Wu added a comment - patch available
        Hide
        Ruth Cao added a comment -

        Hello, it seems that this patch is out-of-date. I created a new one, would somebody pls try it? Thanks.

        Show
        Ruth Cao added a comment - Hello, it seems that this patch is out-of-date. I created a new one, would somebody pls try it? Thanks.
        Hide
        Paulex Yang added a comment -

        Ruth and Tony, patch applied at r527865, thanks a lot.

        Ilya, please verify, thanks.

        Show
        Paulex Yang added a comment - Ruth and Tony, patch applied at r527865, thanks a lot. Ilya, please verify, thanks.

          People

          • Assignee:
            Paulex Yang
            Reporter:
            Ilya Okomin
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development