harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vladimir Ivanov" <ivavladi...@gmail.com>
Subject Re: Suggestion (was: Re: [jira] Closed: (HARMONY-932) [classlib][nio]java.nio.?hannel.DatagramChannel.read(ByteBuffer[] , int, Integer.MAX_VALUE) throws NotYetConnectedException while RI throws IndexOutOfBoundsException)
Date Fri, 21 Jul 2006 03:30:56 GMT
Seems, the same problem is existing not in NIO module only. In any case, it
will be useful to use one method instead of many copies of code. That's for
me, I just can't find the appropriate class for 'package' functions so fix
it inline.
Seems, the function like:
void assertArrayIndex(int arrayLength, int offset, int length){
    if(offset < 0 || length < 0 || (long)offset + (long)length
>  arrayLength){
        throw new IndexOutOfBoundsException();
    }
}
or may be even something like that
void assertArrayIndex(int arrayLength, int offset, int length){
        if (offset < 0)
            throw new IndexOutOfBoundsException("Negative offset");
        if (length < 0)             throw new
IndexOutOfBoundsException("Negative length");
        if ((long)offset + (long)length >  arrayLength)
            throw new IndexOutOfBoundsException("offset+length exceed buffer
size");
}

 Thanks, Vladimir


On 7/21/06, Andrew Zhang <zhanghuangzhu@gmail.com> wrote:
>
> Hi Vladimir,
>
> I noticed the same problem is existing in many places of NIO module.
>
> How about writing a utility function for array index exception check?
> like:
>
> void assertArrayIndex(Object[] array, int offset, int length){
> if(offset < 0 || length < 0 || (long)offset + (long)length >  array.length
> ){
>     throw new IndexOutOfBoundsException();
> }
> }
>
> How do you think about it? Any suggestions?
>
> Thanks!
> Best regards,
>
>
> On 7/21/06, Paulex Yang (JIRA) <jira@apache.org> wrote:
> >
> >     [ http://issues.apache.org/jira/browse/HARMONY-932?page=all ]
> >
> > Paulex Yang closed HARMONY-932.
> > -------------------------------
> >
> >    Estimated Complexity: Novice
> >
> > Verified by Vladimir.
> >
> > > [classlib][nio]java.nio.?hannel.DatagramChannel.read(ByteBuffer[] ,
> int,
> > Integer.MAX_VALUE) throws NotYetConnectedException while RI throws
> > IndexOutOfBoundsException
> > >
> >
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > >
> > >                 Key: HARMONY-932
> > >                 URL: http://issues.apache.org/jira/browse/HARMONY-932
> > >             Project: Harmony
> > >          Issue Type: Bug
> > >          Components: Classlib
> > >            Reporter: Vladimir Ivanov
> > >         Assigned To: Paulex Yang
> > >         Attachments: DatagramChannelImpl.patch
> > >
> > >
> > > The Harmony methods java.nio.?hannel.DatagramChannel.read/write
> (ByteBuffer[]
> > , int, Integer.MAX_VALUE) throws NotYetConnectedException while RI
> throws
> > IndexOutOfBoundsException.
> > > ==================== test.java ======================
> > > import java.nio.channels.*;
> > > import java.nio.*;
> > > public class test  {
> > >     public static void main (String[] args) {
> > >         try {
> > >             DatagramChannel.open().read(new ByteBuffer[] {}, 2,
> > Integer.MAX_VALUE);
> > >         } catch (Exception e) {
> > >             e.printStackTrace();
> > >         }
> > >         try {
> > >             DatagramChannel.open().write(new ByteBuffer[] {}, 2,
> > Integer.MAX_VALUE);
> > >         } catch (Exception e) {
> > >             e.printStackTrace();
> > >         }
> > >     }
> > > }
> > > =================================================
> > > Output:
> > > C:\tmp\tmp17>C:\jdk1.5.0_06\bin\java.exe -cp . -showversion test
> > > 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
> > >         at sun.nio.ch.DatagramChannelImpl.read(
> DatagramChannelImpl.java
> > :366)
> > >         at test.main(test.java:8)
> > > java.lang.IndexOutOfBoundsException
> > >         at sun.nio.ch.DatagramChannelImpl.write(
> DatagramChannelImpl.java
> > :429)
> > >         at test.main(test.java:13)
> > > C:\tmp\tmp17>C:\jrockit-jdk1.5.0-windows-ia32\bin\java.exe -cp .
> > -showversion test
> > > 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))
> > > OutOfMemoryError
> > > -------end of stacktrace
> > > C:\tmp\tmp17>C:\harmony\trunk_0427\deploy\jdk\jre\bin\java.exe -cp .
> > -showversion test
> > > java version 1.5 (subset)
> > > (c) Copyright 1991, 2006 The Apache Software Foundation or its
> > licensors, as applicable.
> > > java.nio.channels.NotYetConnectedException
> > >         at
> > org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> > DatagramChannelImpl.java:567)
> > >         at org.apache.harmony.nio.internal.DatagramChannelImpl.read(
> > DatagramChannelImpl.java:387)
> > >         at test.main(test.java:8)
> > > java.nio.channels.NotYetConnectedException
> > >         at
> > org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> > DatagramChannelImpl.java:567)
> > >         at org.apache.harmony.nio.internal.DatagramChannelImpl.write(
> > DatagramChannelImpl.java:477)
> > >         at test.main(test.java:13)
> > >
> >
> C:\tmp\tmp17>C:\harmony\drlvm\trunk\build\win_ia32_msvc_debug\deploy\jre\bin\ij
> > -Dvm.assert_dialog=false -cp . -showversion test
> > > Apache Harmony DRLVM HEAD-4807 (2006-05-02), Windows/ia32/msvc 1310,
> > debug
> > > java.nio.channels.NotYetConnectedException
> > >         at
> > org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> > DatagramChannelImpl.java:567)
> > >         at org.apache.harmony.nio.internal.DatagramChannelImpl.read(
> > DatagramChannelImpl.java:387)
> > >         at test.main(test.java:8)
> > > java.nio.channels.NotYetConnectedException
> > >         at
> > org.apache.harmony.nio.internal.DatagramChannelImpl.checkOpenConnected(
> > DatagramChannelImpl.java:567)
> > >         at org.apache.harmony.nio.internal.DatagramChannelImpl.write(
> > DatagramChannelImpl.java:477)
> > >         at test.main(test.java:13)
> >
> > --
> > 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
> >
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message