On 8/15/06, Geir Magnusson Jr <[EMAIL PROTECTED]> wrote:

When looking at HARMONY-1156, it became clear that our
java.io.OutputStream isn't right.

I'd like to make the following changes :

Follow the spec so that an IndexOOBE is thrown when :

a) offset is negative or
b) len is negative or
c) off + len > buff.length

So in the case of

  write( byte[count], count, 0);

for any value of count >= 0, then none of the conditions are true, and
it should simply [quickly] return.

Now, the spec says that if the array is null, then a NPE should be
thrown, but this doesn't happen in the RI when len = 0.


Yes. It's a common exception throw sequence of RI.
Vladimir Ivanov has provided a util patch for such exception check, iirc.
For detail, please refer to Harmony-942 (
http://issues.apache.org/jira/browse/HARMONY-942).
Following code snippet is copied from Harmony-942 patch. Does it work for
this problem?
public static void assertArrayIndex(byte[] array, int offset, int length) {
 if (offset < 0 || length < 0) {
  throw new IndexOutOfBoundsException(Msg.getString("K0006"));
 }
 if ((long)offset+(long)length >  array.length) {
  throw new IndexOutOfBoundsException(Msg.getString("K00ae"));
 }
}

Of course, If long cast looks not elegant, we can change the code as
following:
"if (offset >  array.length-length) ".


This seems to be a reasonable thing to do, and therefore I think that we
should match the RI here, and not the spec.

Comments?

geir


---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Andrew Zhang
China Software Development Lab, IBM

Reply via email to