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