+1 for the following check:

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

--
Ivan

On 8/14/06, Geir Magnusson Jr <[EMAIL PROTECTED]> wrote:
Ivan Volosyuk wrote:
> It looks like that it is possible to get zero bytes even at the very
> end of array. IMHO the order of boundary checks makes sense here.

This is an interesting problem. The JNI spec is clear that we should
throw an exception when one of the indexes isn't valid, and start ==
size is arguably not valid, as Gregory points out.

So I think the JNI impl is right for now (but I want to test w/ the JNI
impl in RI....)

As for classlibrary :

I was testing with the RI vi java.io.OutputStream#write(buff[], offset,
len), and the RI is clearly broken as it doesn't throw an NPE when [] is
null.

However, strictly speaking, 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.

Therefore, I'll start a new thread re refining OutputStream to match
those rules, and then go on to test the JNI impl of the RI.

geir

> --
> Ivan
>
> On 8/11/06, Gregory Shimansky <[EMAIL PROTECTED]> wrote:
>> 2006/8/11, Jimmy, Jing Lv <[EMAIL PROTECTED]>:
>> >
>> > Hi,
>> >
>> >      As discussed in the former thread, I find that a JNI of DRLVM
>> > (GetByteArrayRegion) differs from RI in passing parameter
>> > (byte[count],count,0). RI (and J9 VM) returns immediately but DRLVM
>> > throws an ArrayIndexOutOfBoundsException.
>> >      IMHO, it is better to improve here, make it follow RI, as JNI is
>> > also a part of API, and users may use it. So if no objections, shall I
>> > or someone raise a JIRA for this?
>> >
>> >      I don't know if Martin is urgent in using Harmony in Winstone
>> > servlet engine (Martin, can you read this?), so shall I work around in
>> > java code before we have conclusion?
>> >
>> >      Any comments/suggestions from DRLVM guys? Thanks!
>> >
>>
>> I didn't really understand the condition when vm throws AIOBE. Do you
>> pass
>> start parameter count for the array of count length? But in this case the
>> start points to the element right after the array end. And spec [1]
>> explicitly states that this function should throw AIOBE in this case. Is
>> there something I don't understand?
>>
>> [1]
>> http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/functions.html#wp6212

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

Reply via email to