You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Andrew Zhang <zh...@gmail.com> on 2006/07/21 05:00:30 UTC

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)

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) <ji...@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

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)

Posted by Andrew Zhang <zh...@gmail.com>.
Hi everybody,

How about placing these methods in utli.java in o.a.h.<module>.util package?


Best regards,
Andrew




On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
>
> 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 <zh...@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) <ji...@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
> >
> >
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Andrew Zhang <zh...@gmail.com>.
On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
>
> On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> >
> > Thanks Vladimir,
> >
> > I tested many methods in java.nio.channels, most of which follow
> > assertArrayIndex(Object[], int, int). :)
> >
> > So I agree that we need two assertArrayIndex methods. Using which one
> > depends on RI's behaviour.
> >
> > How about adding these methods into some class in
> > o.a.h.internal.uitlpackage for each module? Just the same as
> > Msg.java.
> >
> > Any suggestions/comments?
>
>
> Agree, it may be source file location
>
> trunk\modules\<name>\src\main\java\org\apache\harmony\<name>\internal\utils\Utility.java


I notice in luni module, there is a file named "Util.java". :)

and package
> org.apache.harmony.<name>.internal.utils.Utility.
>
> If no objection, I'll prepare the patch for nio module today.



Thank you, Vladimir :)

After verify
> that it is work OK, this class can be copied at least to luni and text
> modules.
>
> thanks, Vladimir
>
>
> Best regards,
> > Andrew
> >
> >
> > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > >
> > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > >
> > > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > > >
> > > > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > > > >Invoking assertArray(array.length, 0, -1) will throw
> > > > NullPointerException
> > > > > >instead of IndexOutOfBoundException.  It's not compatible with
> RI.
> > > > > >Do you think so?
> > > > >
> > > > > No. We should check reference before using :) To corectly process
> a
> > > NPE
> > > > we
> > > > > should write:
> > > > >
> > > > > method m(Object[] array, int offset, int length) {
> > > > >    if (array == null)
> > > > >        throw new NullPointerException();
> > > > >    assertArrayIndex(array.length, offset, length);
> > > > >    ..........
> > > > > }
> > > >
> > > >
> > > > But RI throws IndexOutOfBoundsException for (null,-1,-1). :) (at
> > least,
> > > in
> > > > most cases).
> > > > Would you please have a check? Thanks!
> > >
> > >
> > >
> > > I don't check the most cases, but just combine sources from issues 791
> > and
> > > 801. Seems, in different packages/ methods RI have different behavior:
> > >
> > > ============= test.java ====================
> > > import java.nio.*;
> > > public class test {
> > >    public static void main (String[] args) {
> > >       try {
> > >           CharBuffer.allocate(10).put((char[]) null, -11,
> > > Integer.MAX_VALUE);
> > >
> > >       } catch (Exception e) {
> > >           System.out.println("c: " + e);
> > >       }
> > >       try {
> > >           FloatBuffer.allocate(10).put((float[]) null, -1,
> > > Integer.MAX_VALUE);
> > >       } catch (Exception e) {
> > >           System.out.println("f: " + e);
> > >       }
> > >       try {
> > >           DoubleBuffer.allocate(10).put((double[]) null, -1,
> > > Integer.MAX_VALUE);
> > >       } catch (Exception e) {
> > >           System.out.println("d: " + e);
> > >       }
> > >       try {
> > >           IntBuffer.allocate(10).put((int[]) null, -11,
> > Integer.MAX_VALUE
> > > );
> > >
> > >       } catch (Exception e) {
> > >           System.out.println("i: " + e);
> > >       }
> > >       try {
> > >           LongBuffer.allocate(10).put((long[]) null, -1,
> > Integer.MAX_VALUE
> > > );
> > >
> > >       } catch (Exception e) {
> > >           System.out.println("l: " + e);
> > >       }
> > >       try {
> > >           ShortBuffer.allocate(10).put((short[]) null, -1,
> > > Integer.MAX_VALUE);
> > >       } catch (Exception e) {
> > >           System.out.println("s: " + e);
> > >       }
> > >       try {
> > >           new String((int[]) null, -2, Integer.MAX_VALUE);;
> > >       } catch (Exception e) {
> > >           System.out.println("str: " + e);
> > >       }
> > >    }
> > > }
> > > ========================================
> > > Output:
> > >
> > > 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))
> > >
> > > c: java.lang.NullPointerException
> > > f: java.lang.NullPointerException
> > > d: java.lang.NullPointerException
> > > i: java.lang.NullPointerException
> > > l: java.lang.NullPointerException
> > > s: java.lang.NullPointerException
> > > str: java.lang.StringIndexOutOfBoundsException: String index out of
> > range:
> > > -2
> > >
> > > 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.
> > > c: java.lang.NullPointerException
> > > f: java.lang.NullPointerException
> > > d: java.lang.NullPointerException
> > > i: java.lang.NullPointerException
> > > l: java.lang.NullPointerException
> > > s: java.lang.IndexOutOfBoundsException
> > > str: java.lang.NullPointerException
> > >
> > > So, we need 2 methods with different checks order:
> > > void assertArrayIndex(Object[] array, 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 >  array.length) //can throw
> > > NullPointerException
> > >        throw new IndexOutOfBoundsException("offset+length exceed
> buffer
> > > size");
> > > }
> > > and
> > > void assertArrayIndex(int arrayLength, int offset, int length) {
> > > ....
> > > }
> > >
> > > thanks, Vladimir
> > >
> > > PS. seems, behavior for ShortBuffer.allocate(10).put((short[]) null,
> -1,
> > > ..); should be unified with other methods
> > >
> > >
> > > or write something like
> > > > > void assertArrayIndex(Object[] array, int offset, int length){
> > > > >       if (array == null)
> > > > >           throw new NullPointerException();
> > > > >       if (offset < 0)
> > > > >           throw new IndexOutOfBoundsException("Negative offset");
> > > > >       if (length < 0)
> > > > >             throw new IndexOutOfBoundsException("Negative
> length");
> > > > >       if ((long)offset + (long)length >  array.length)
> > > > >           throw new IndexOutOfBoundsException("offset+length
> exceed
> > > > buffer
> > > > > size");
> > > > > }
> > > > >
> > > > > thanks, Vladimir
> > > > >
> > > > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > > >
> > > > > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > > > > >
> > > > > > > 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");
> > > > > > > }
> > > > > >
> > > > > >
> > > > > > Hi Vladimir, I have some comments on your revised method. :)
> > > > > > Using int as the first parameter will cause problem. Consider:
> > > > > > Invoking assertArray(array.length, 0, -1) will throw
> > > > > NullPointerException
> > > > > > instead of IndexOutOfBoundException.  It's not compatible with
> RI.
> > > > > > Do you think so?
> > > > > >
> > > > > > Thanks!
> > > > > >
> > > > > >
> > > > > > Thanks, Vladimir
> > > > > > >
> > > > > > >
> > > > > > > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Andrew Zhang
> > > > > > China Software Development Lab, IBM
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Andrew Zhang
> > > > China Software Development Lab, IBM
> > > >
> > > >
> > >
> > >
> >
> >
> > --
> > Andrew Zhang
> > China Software Development Lab, IBM
> >
> >
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Vladimir Ivanov <iv...@gmail.com>.
On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
>
> Thanks Vladimir,
>
> I tested many methods in java.nio.channels, most of which follow
> assertArrayIndex(Object[], int, int). :)
>
> So I agree that we need two assertArrayIndex methods. Using which one
> depends on RI's behaviour.
>
> How about adding these methods into some class in
> o.a.h.internal.uitlpackage for each module? Just the same as
> Msg.java.
>
> Any suggestions/comments?


 Agree, it may be source file location
trunk\modules\<name>\src\main\java\org\apache\harmony\<name>\internal\utils\Utility.java

and package
org.apache.harmony.<name>.internal.utils.Utility.

If no objection, I'll prepare the patch for nio module today. After verify
that it is work OK, this class can be copied at least to luni and text
modules.

thanks, Vladimir


Best regards,
> Andrew
>
>
> On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> >
> > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > >
> > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > >
> > > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > > >Invoking assertArray(array.length, 0, -1) will throw
> > > NullPointerException
> > > > >instead of IndexOutOfBoundException.  It's not compatible with RI.
> > > > >Do you think so?
> > > >
> > > > No. We should check reference before using :) To corectly process a
> > NPE
> > > we
> > > > should write:
> > > >
> > > > method m(Object[] array, int offset, int length) {
> > > >    if (array == null)
> > > >        throw new NullPointerException();
> > > >    assertArrayIndex(array.length, offset, length);
> > > >    ..........
> > > > }
> > >
> > >
> > > But RI throws IndexOutOfBoundsException for (null,-1,-1). :) (at
> least,
> > in
> > > most cases).
> > > Would you please have a check? Thanks!
> >
> >
> >
> > I don't check the most cases, but just combine sources from issues 791
> and
> > 801. Seems, in different packages/ methods RI have different behavior:
> >
> > ============= test.java ====================
> > import java.nio.*;
> > public class test {
> >    public static void main (String[] args) {
> >       try {
> >           CharBuffer.allocate(10).put((char[]) null, -11,
> > Integer.MAX_VALUE);
> >
> >       } catch (Exception e) {
> >           System.out.println("c: " + e);
> >       }
> >       try {
> >           FloatBuffer.allocate(10).put((float[]) null, -1,
> > Integer.MAX_VALUE);
> >       } catch (Exception e) {
> >           System.out.println("f: " + e);
> >       }
> >       try {
> >           DoubleBuffer.allocate(10).put((double[]) null, -1,
> > Integer.MAX_VALUE);
> >       } catch (Exception e) {
> >           System.out.println("d: " + e);
> >       }
> >       try {
> >           IntBuffer.allocate(10).put((int[]) null, -11,
> Integer.MAX_VALUE
> > );
> >
> >       } catch (Exception e) {
> >           System.out.println("i: " + e);
> >       }
> >       try {
> >           LongBuffer.allocate(10).put((long[]) null, -1,
> Integer.MAX_VALUE
> > );
> >
> >       } catch (Exception e) {
> >           System.out.println("l: " + e);
> >       }
> >       try {
> >           ShortBuffer.allocate(10).put((short[]) null, -1,
> > Integer.MAX_VALUE);
> >       } catch (Exception e) {
> >           System.out.println("s: " + e);
> >       }
> >       try {
> >           new String((int[]) null, -2, Integer.MAX_VALUE);;
> >       } catch (Exception e) {
> >           System.out.println("str: " + e);
> >       }
> >    }
> > }
> > ========================================
> > Output:
> >
> > 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))
> >
> > c: java.lang.NullPointerException
> > f: java.lang.NullPointerException
> > d: java.lang.NullPointerException
> > i: java.lang.NullPointerException
> > l: java.lang.NullPointerException
> > s: java.lang.NullPointerException
> > str: java.lang.StringIndexOutOfBoundsException: String index out of
> range:
> > -2
> >
> > 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.
> > c: java.lang.NullPointerException
> > f: java.lang.NullPointerException
> > d: java.lang.NullPointerException
> > i: java.lang.NullPointerException
> > l: java.lang.NullPointerException
> > s: java.lang.IndexOutOfBoundsException
> > str: java.lang.NullPointerException
> >
> > So, we need 2 methods with different checks order:
> > void assertArrayIndex(Object[] array, 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 >  array.length) //can throw
> > NullPointerException
> >        throw new IndexOutOfBoundsException("offset+length exceed buffer
> > size");
> > }
> > and
> > void assertArrayIndex(int arrayLength, int offset, int length) {
> > ....
> > }
> >
> > thanks, Vladimir
> >
> > PS. seems, behavior for ShortBuffer.allocate(10).put((short[]) null, -1,
> > ..); should be unified with other methods
> >
> >
> > or write something like
> > > > void assertArrayIndex(Object[] array, int offset, int length){
> > > >       if (array == null)
> > > >           throw new NullPointerException();
> > > >       if (offset < 0)
> > > >           throw new IndexOutOfBoundsException("Negative offset");
> > > >       if (length < 0)
> > > >             throw new IndexOutOfBoundsException("Negative length");
> > > >       if ((long)offset + (long)length >  array.length)
> > > >           throw new IndexOutOfBoundsException("offset+length exceed
> > > buffer
> > > > size");
> > > > }
> > > >
> > > > thanks, Vladimir
> > > >
> > > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > >
> > > > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > > > >
> > > > > > 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");
> > > > > > }
> > > > >
> > > > >
> > > > > Hi Vladimir, I have some comments on your revised method. :)
> > > > > Using int as the first parameter will cause problem. Consider:
> > > > > Invoking assertArray(array.length, 0, -1) will throw
> > > > NullPointerException
> > > > > instead of IndexOutOfBoundException.  It's not compatible with RI.
> > > > > Do you think so?
> > > > >
> > > > > Thanks!
> > > > >
> > > > >
> > > > > Thanks, Vladimir
> > > > > >
> > > > > >
> > > > > > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Andrew Zhang
> > > > > China Software Development Lab, IBM
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Andrew Zhang
> > > China Software Development Lab, IBM
> > >
> > >
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>

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)

Posted by Andrew Zhang <zh...@gmail.com>.
Thanks Vladimir,

I tested many methods in java.nio.channels, most of which follow
assertArrayIndex(Object[], int, int). :)

So I agree that we need two assertArrayIndex methods. Using which one
depends on RI's behaviour.

How about adding these methods into some class in
o.a.h.internal.uitlpackage for each module? Just the same as
Msg.java.

Any suggestions/comments?

Best regards,
Andrew


On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
>
> On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> >
> > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > >
> > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > > >Invoking assertArray(array.length, 0, -1) will throw
> > NullPointerException
> > > >instead of IndexOutOfBoundException.  It's not compatible with RI.
> > > >Do you think so?
> > >
> > > No. We should check reference before using :) To corectly process a
> NPE
> > we
> > > should write:
> > >
> > > method m(Object[] array, int offset, int length) {
> > >    if (array == null)
> > >        throw new NullPointerException();
> > >    assertArrayIndex(array.length, offset, length);
> > >    ..........
> > > }
> >
> >
> > But RI throws IndexOutOfBoundsException for (null,-1,-1). :) (at least,
> in
> > most cases).
> > Would you please have a check? Thanks!
>
>
>
> I don't check the most cases, but just combine sources from issues 791 and
> 801. Seems, in different packages/ methods RI have different behavior:
>
> ============= test.java ====================
> import java.nio.*;
> public class test {
>    public static void main (String[] args) {
>       try {
>           CharBuffer.allocate(10).put((char[]) null, -11,
> Integer.MAX_VALUE);
>
>       } catch (Exception e) {
>           System.out.println("c: " + e);
>       }
>       try {
>           FloatBuffer.allocate(10).put((float[]) null, -1,
> Integer.MAX_VALUE);
>       } catch (Exception e) {
>           System.out.println("f: " + e);
>       }
>       try {
>           DoubleBuffer.allocate(10).put((double[]) null, -1,
> Integer.MAX_VALUE);
>       } catch (Exception e) {
>           System.out.println("d: " + e);
>       }
>       try {
>           IntBuffer.allocate(10).put((int[]) null, -11, Integer.MAX_VALUE
> );
>
>       } catch (Exception e) {
>           System.out.println("i: " + e);
>       }
>       try {
>           LongBuffer.allocate(10).put((long[]) null, -1, Integer.MAX_VALUE
> );
>
>       } catch (Exception e) {
>           System.out.println("l: " + e);
>       }
>       try {
>           ShortBuffer.allocate(10).put((short[]) null, -1,
> Integer.MAX_VALUE);
>       } catch (Exception e) {
>           System.out.println("s: " + e);
>       }
>       try {
>           new String((int[]) null, -2, Integer.MAX_VALUE);;
>       } catch (Exception e) {
>           System.out.println("str: " + e);
>       }
>    }
> }
> ========================================
> Output:
>
> 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))
>
> c: java.lang.NullPointerException
> f: java.lang.NullPointerException
> d: java.lang.NullPointerException
> i: java.lang.NullPointerException
> l: java.lang.NullPointerException
> s: java.lang.NullPointerException
> str: java.lang.StringIndexOutOfBoundsException: String index out of range:
> -2
>
> 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.
> c: java.lang.NullPointerException
> f: java.lang.NullPointerException
> d: java.lang.NullPointerException
> i: java.lang.NullPointerException
> l: java.lang.NullPointerException
> s: java.lang.IndexOutOfBoundsException
> str: java.lang.NullPointerException
>
> So, we need 2 methods with different checks order:
> void assertArrayIndex(Object[] array, 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 >  array.length) //can throw
> NullPointerException
>        throw new IndexOutOfBoundsException("offset+length exceed buffer
> size");
> }
> and
> void assertArrayIndex(int arrayLength, int offset, int length) {
> ....
> }
>
> thanks, Vladimir
>
> PS. seems, behavior for ShortBuffer.allocate(10).put((short[]) null, -1,
> ..); should be unified with other methods
>
>
> or write something like
> > > void assertArrayIndex(Object[] array, int offset, int length){
> > >       if (array == null)
> > >           throw new NullPointerException();
> > >       if (offset < 0)
> > >           throw new IndexOutOfBoundsException("Negative offset");
> > >       if (length < 0)
> > >             throw new IndexOutOfBoundsException("Negative length");
> > >       if ((long)offset + (long)length >  array.length)
> > >           throw new IndexOutOfBoundsException("offset+length exceed
> > buffer
> > > size");
> > > }
> > >
> > > thanks, Vladimir
> > >
> > > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > >
> > > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > > >
> > > > > 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");
> > > > > }
> > > >
> > > >
> > > > Hi Vladimir, I have some comments on your revised method. :)
> > > > Using int as the first parameter will cause problem. Consider:
> > > > Invoking assertArray(array.length, 0, -1) will throw
> > > NullPointerException
> > > > instead of IndexOutOfBoundException.  It's not compatible with RI.
> > > > Do you think so?
> > > >
> > > > Thanks!
> > > >
> > > >
> > > > Thanks, Vladimir
> > > > >
> > > > >
> > > > > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Andrew Zhang
> > > > China Software Development Lab, IBM
> > > >
> > > >
> > >
> > >
> >
> >
> > --
> > Andrew Zhang
> > China Software Development Lab, IBM
> >
> >
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Vladimir Ivanov <iv...@gmail.com>.
On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
>
> On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> >
> > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> > >Invoking assertArray(array.length, 0, -1) will throw
> NullPointerException
> > >instead of IndexOutOfBoundException.  It's not compatible with RI.
> > >Do you think so?
> >
> > No. We should check reference before using :) To corectly process a NPE
> we
> > should write:
> >
> > method m(Object[] array, int offset, int length) {
> >    if (array == null)
> >        throw new NullPointerException();
> >    assertArrayIndex(array.length, offset, length);
> >    ..........
> > }
>
>
> But RI throws IndexOutOfBoundsException for (null,-1,-1). :) (at least, in
> most cases).
> Would you please have a check? Thanks!



I don't check the most cases, but just combine sources from issues 791 and
801. Seems, in different packages/ methods RI have different behavior:

============= test.java ====================
import java.nio.*;
public class test {
    public static void main (String[] args) {
       try {
           CharBuffer.allocate(10).put((char[]) null, -11, Integer.MAX_VALUE);

       } catch (Exception e) {
           System.out.println("c: " + e);
       }
       try {
           FloatBuffer.allocate(10).put((float[]) null, -1,
Integer.MAX_VALUE);
       } catch (Exception e) {
           System.out.println("f: " + e);
       }
       try {
           DoubleBuffer.allocate(10).put((double[]) null, -1,
Integer.MAX_VALUE);
       } catch (Exception e) {
           System.out.println("d: " + e);
       }
       try {
           IntBuffer.allocate(10).put((int[]) null, -11, Integer.MAX_VALUE);

       } catch (Exception e) {
           System.out.println("i: " + e);
       }
       try {
           LongBuffer.allocate(10).put((long[]) null, -1, Integer.MAX_VALUE);

       } catch (Exception e) {
           System.out.println("l: " + e);
       }
       try {
           ShortBuffer.allocate(10).put((short[]) null, -1,
Integer.MAX_VALUE);
       } catch (Exception e) {
           System.out.println("s: " + e);
       }
       try {
           new String((int[]) null, -2, Integer.MAX_VALUE);;
       } catch (Exception e) {
           System.out.println("str: " + e);
       }
    }
}
========================================
Output:

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))

c: java.lang.NullPointerException
f: java.lang.NullPointerException
d: java.lang.NullPointerException
i: java.lang.NullPointerException
l: java.lang.NullPointerException
s: java.lang.NullPointerException
str: java.lang.StringIndexOutOfBoundsException: String index out of range:
-2

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.
c: java.lang.NullPointerException
f: java.lang.NullPointerException
d: java.lang.NullPointerException
i: java.lang.NullPointerException
l: java.lang.NullPointerException
s: java.lang.IndexOutOfBoundsException
str: java.lang.NullPointerException

So, we need 2 methods with different checks order:
void assertArrayIndex(Object[] array, 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 >  array.length) //can throw
NullPointerException
        throw new IndexOutOfBoundsException("offset+length exceed buffer
size");
}
and
void assertArrayIndex(int arrayLength, int offset, int length) {
....
}

 thanks, Vladimir

PS. seems, behavior for ShortBuffer.allocate(10).put((short[]) null, -1,
..); should be unified with other methods


or write something like
> > void assertArrayIndex(Object[] array, int offset, int length){
> >       if (array == null)
> >           throw new NullPointerException();
> >       if (offset < 0)
> >           throw new IndexOutOfBoundsException("Negative offset");
> >       if (length < 0)
> >             throw new IndexOutOfBoundsException("Negative length");
> >       if ((long)offset + (long)length >  array.length)
> >           throw new IndexOutOfBoundsException("offset+length exceed
> buffer
> > size");
> > }
> >
> > thanks, Vladimir
> >
> > On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> >
> > > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > > >
> > > > 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");
> > > > }
> > >
> > >
> > > Hi Vladimir, I have some comments on your revised method. :)
> > > Using int as the first parameter will cause problem. Consider:
> > > Invoking assertArray(array.length, 0, -1) will throw
> > NullPointerException
> > > instead of IndexOutOfBoundException.  It's not compatible with RI.
> > > Do you think so?
> > >
> > > Thanks!
> > >
> > >
> > > Thanks, Vladimir
> > > >
> > > >
> > > > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Andrew Zhang
> > > China Software Development Lab, IBM
> > >
> > >
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>

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)

Posted by Andrew Zhang <zh...@gmail.com>.
On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
>
> On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
> >Invoking assertArray(array.length, 0, -1) will throw NullPointerException
> >instead of IndexOutOfBoundException.  It's not compatible with RI.
> >Do you think so?
>
> No. We should check reference before using :) To corectly process a NPE we
> should write:
>
> method m(Object[] array, int offset, int length) {
>    if (array == null)
>        throw new NullPointerException();
>    assertArrayIndex(array.length, offset, length);
>    ..........
> }


But RI throws IndexOutOfBoundsException for (null,-1,-1). :) (at least, in
most cases).
Would you please have a check? Thanks!

or write something like
> void assertArrayIndex(Object[] array, int offset, int length){
>       if (array == null)
>           throw new NullPointerException();
>       if (offset < 0)
>           throw new IndexOutOfBoundsException("Negative offset");
>       if (length < 0)
>             throw new IndexOutOfBoundsException("Negative length");
>       if ((long)offset + (long)length >  array.length)
>           throw new IndexOutOfBoundsException("offset+length exceed buffer
> size");
> }
>
> thanks, Vladimir
>
> On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
>
> > On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> > >
> > > 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");
> > > }
> >
> >
> > Hi Vladimir, I have some comments on your revised method. :)
> > Using int as the first parameter will cause problem. Consider:
> > Invoking assertArray(array.length, 0, -1) will throw
> NullPointerException
> > instead of IndexOutOfBoundException.  It's not compatible with RI.
> > Do you think so?
> >
> > Thanks!
> >
> >
> > Thanks, Vladimir
> > >
> > >
> > > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > > >
> > > >
> > >
> > >
> >
> >
> > --
> > Andrew Zhang
> > China Software Development Lab, IBM
> >
> >
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Vladimir Ivanov <iv...@gmail.com>.
On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:
>Invoking assertArray(array.length, 0, -1) will throw NullPointerException
>instead of IndexOutOfBoundException.  It's not compatible with RI.
>Do you think so?

No. We should check reference before using :) To corectly process a NPE we
should write:

method m(Object[] array, int offset, int length) {
    if (array == null)
        throw new NullPointerException();
    assertArrayIndex(array.length, offset, length);
    ..........
}

or write something like
 void assertArrayIndex(Object[] array, int offset, int length){
       if (array == null)
           throw new NullPointerException();
       if (offset < 0)
           throw new IndexOutOfBoundsException("Negative offset");
       if (length < 0)
             throw new IndexOutOfBoundsException("Negative length");
       if ((long)offset + (long)length >  array.length)
           throw new IndexOutOfBoundsException("offset+length exceed buffer
size");
}

  thanks, Vladimir

On 7/21/06, Andrew Zhang <zh...@gmail.com> wrote:

> On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
> >
> > 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");
> > }
>
>
> Hi Vladimir, I have some comments on your revised method. :)
> Using int as the first parameter will cause problem. Consider:
> Invoking assertArray(array.length, 0, -1) will throw NullPointerException
> instead of IndexOutOfBoundException.  It's not compatible with RI.
> Do you think so?
>
> Thanks!
>
>
> Thanks, Vladimir
> >
> >
> > On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> > >
> > >
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>

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)

Posted by Andrew Zhang <zh...@gmail.com>.
On 7/21/06, Vladimir Ivanov <iv...@gmail.com> wrote:
>
> 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");
> }


Hi Vladimir, I have some comments on your revised method. :)
Using int as the first parameter will cause problem. Consider:
Invoking assertArray(array.length, 0, -1) will throw NullPointerException
instead of IndexOutOfBoundException.  It's not compatible with RI.
Do you think so?

Thanks!


Thanks, Vladimir
>
>
> On 7/21/06, Andrew Zhang <zh...@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) <ji...@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
> >
> >
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Vladimir Ivanov <iv...@gmail.com>.
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 <zh...@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) <ji...@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
>
>

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)

Posted by Alexey Petrenko <al...@gmail.com>.
2006/7/21, Andrew Zhang <zh...@gmail.com>:
> On 7/21/06, Alexey Petrenko <al...@gmail.com> wrote:
> >
> > My two cents... :)
> >
> > Put all the array size checking code in one place is a good idea. Code
> > reuse is always good idea.
> >
> > But do not forget that Java has 2 problems here:
> > 1. It can not inline methods or include code in java file
> > 2. Method call is a long operation.
> >
> > So huge number of additional method calls can significantly downgrade
> > the performance...
>
>
> ya... so we need a balance between performance and reuse. For this case, I
> vote for reuse.
>
>> Probably VM JIT guys will correct me.
> I hope so. :)
If VM JIT guys will tell that this method will be defenetly inlined
(and this simple method is really good candidate for inline) I will
agree with you :)
Hmm... Probably I need to write a smal test...

> Anyway... I think that the best plays for such tool methods is a misc
> module, not util.
> I don't think it's necessary to put these method in a seperate module for
> all other modules.
>
> We have similiar requirement before, like Msg.java. Just put one copy in
> each module is fine.
I agree with you here. And we probably need to generate it from build
script just like we discussed this for Msg.java


> >
> > 2006/7/21, Andrew Zhang <zh...@gmail.com>:
> > > 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) <ji...@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
> > >
> > >
> >
> >
> > --
> > Alexey A. Petrenko
> > Intel Middleware Products Division
> >
> > ---------------------------------------------------------------------
> > Terms of use : http://incubator.apache.org/harmony/mailing.html
> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> >
> >
>
>
> --
> Andrew Zhang
> China Software Development Lab, IBM
>
>


-- 
Alexey A. Petrenko
Intel Middleware Products Division

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


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)

Posted by Andrew Zhang <zh...@gmail.com>.
On 7/21/06, Alexey Petrenko <al...@gmail.com> wrote:
>
> My two cents... :)
>
> Put all the array size checking code in one place is a good idea. Code
> reuse is always good idea.
>
> But do not forget that Java has 2 problems here:
> 1. It can not inline methods or include code in java file
> 2. Method call is a long operation.
>
> So huge number of additional method calls can significantly downgrade
> the performance...


ya... so we need a balance between performance and reuse. For this case, I
vote for reuse.

Probably VM JIT guys will correct me.


I hope so. :)

Anyway... I think that the best plays for such tool methods is a misc
> module, not util.



I don't think it's necessary to put these method in a seperate module for
all other modules.

We have similiar requirement before, like Msg.java. Just put one copy in
each module is fine.

SY, Alexey
>
> 2006/7/21, Andrew Zhang <zh...@gmail.com>:
> > 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) <ji...@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
> >
> >
>
>
> --
> Alexey A. Petrenko
> Intel Middleware Products Division
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>


-- 
Andrew Zhang
China Software Development Lab, IBM

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)

Posted by Alexey Petrenko <al...@gmail.com>.
2006/7/21, Alexey Petrenko <al...@gmail.com>:
> My two cents... :)
>
> Put all the array size checking code in one place is a good idea. Code
> reuse is always good idea.
>
> But do not forget that Java has 2 problems here:
> 1. It can not inline methods or include code in java file
> 2. Method call is a long operation.
>
> So huge number of additional method calls can significantly downgrade
> the performance...
>
> Probably VM JIT guys will correct me.
>
> Anyway... I think that the best plays for such tool methods is a misc
> module, not util.
"Place" not "plays" :)
Should have more time to sleep :)

>
> SY, Alexey
>
> 2006/7/21, Andrew Zhang <zh...@gmail.com>:
> > 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) <ji...@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
> >
> >
>
>
> --
> Alexey A. Petrenko
> Intel Middleware Products Division
>


-- 
Alexey A. Petrenko
Intel Middleware Products Division

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


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)

Posted by Vladimir Ivanov <iv...@gmail.com>.
issue 942 was created with patch. But seems the modifier 'final' shoul be
added (depends on JIT).

thanks, Vladimir


On 7/21/06, Alexey Petrenko <al...@gmail.com> wrote:
>
> 2006/7/21, Paulex Yang <pa...@gmail.com>:
> > Alexey Petrenko wrote:
> > > My two cents... :)
> > >
> > > Put all the array size checking code in one place is a good idea. Code
> > > reuse is always good idea.
> > >
> > > But do not forget that Java has 2 problems here:
> > > 1. It can not inline methods or include code in java file
> > > 2. Method call is a long operation.
> > AFAIK, the final/static/private(i.e. non-overriddable) methods have
> > chance to be inlined by JIT or so? (waiting for JIT guys correct me)
> As far as I know ALL the methods are have chance to inline. The
> question is how fast it will be done.
>
> > > So huge number of additional method calls can significantly downgrade
> > > the performance...
> > Performance is a complex issue, my rule of thumb is that without
> > benchmarking and bottleneck identification, the performance optimization
> > probably misses the target. Further, codes with good structure are
> > easier to be optimized later, while duplicate codes are probably evil...
> > >
> > > Probably VM JIT guys will correct me.
> > >
> > > Anyway... I think that the best plays for such tool methods is a misc
> > > module, not util.
> > Why does it matters in which module? I mean, does this related to
> > performance?
> I did not talk about performance here :)
>
> > >
> > > SY, Alexey
> > >
> > > 2006/7/21, Andrew Zhang <zh...@gmail.com>:
> > >> 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) <ji...@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
> > >>
> > >>
> > >
> > >
> >
> >
> > --
> > Paulex Yang
> > China Software Development Lab
> > IBM
> >
> >
> >
> > ---------------------------------------------------------------------
> > Terms of use : http://incubator.apache.org/harmony/mailing.html
> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> >
> >
>
>
> --
> Alexey A. Petrenko
> Intel Middleware Products Division
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>

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)

Posted by Alexey Petrenko <al...@gmail.com>.
2006/7/21, Paulex Yang <pa...@gmail.com>:
> Alexey Petrenko wrote:
> > My two cents... :)
> >
> > Put all the array size checking code in one place is a good idea. Code
> > reuse is always good idea.
> >
> > But do not forget that Java has 2 problems here:
> > 1. It can not inline methods or include code in java file
> > 2. Method call is a long operation.
> AFAIK, the final/static/private(i.e. non-overriddable) methods have
> chance to be inlined by JIT or so? (waiting for JIT guys correct me)
As far as I know ALL the methods are have chance to inline. The
question is how fast it will be done.

> > So huge number of additional method calls can significantly downgrade
> > the performance...
> Performance is a complex issue, my rule of thumb is that without
> benchmarking and bottleneck identification, the performance optimization
> probably misses the target. Further, codes with good structure are
> easier to be optimized later, while duplicate codes are probably evil...
> >
> > Probably VM JIT guys will correct me.
> >
> > Anyway... I think that the best plays for such tool methods is a misc
> > module, not util.
> Why does it matters in which module? I mean, does this related to
> performance?
I did not talk about performance here :)

> >
> > SY, Alexey
> >
> > 2006/7/21, Andrew Zhang <zh...@gmail.com>:
> >> 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) <ji...@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
> >>
> >>
> >
> >
>
>
> --
> Paulex Yang
> China Software Development Lab
> IBM
>
>
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>


-- 
Alexey A. Petrenko
Intel Middleware Products Division

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


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)

Posted by Paulex Yang <pa...@gmail.com>.
Alexey Petrenko wrote:
> My two cents... :)
>
> Put all the array size checking code in one place is a good idea. Code
> reuse is always good idea.
>
> But do not forget that Java has 2 problems here:
> 1. It can not inline methods or include code in java file
> 2. Method call is a long operation.
AFAIK, the final/static/private(i.e. non-overriddable) methods have 
chance to be inlined by JIT or so? (waiting for JIT guys correct me)
>
> So huge number of additional method calls can significantly downgrade
> the performance...
Performance is a complex issue, my rule of thumb is that without 
benchmarking and bottleneck identification, the performance optimization 
probably misses the target. Further, codes with good structure are 
easier to be optimized later, while duplicate codes are probably evil...
>
> Probably VM JIT guys will correct me.
>
> Anyway... I think that the best plays for such tool methods is a misc
> module, not util.
Why does it matters in which module? I mean, does this related to 
performance?
>
> SY, Alexey
>
> 2006/7/21, Andrew Zhang <zh...@gmail.com>:
>> 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) <ji...@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
>>
>>
>
>


-- 
Paulex Yang
China Software Development Lab
IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


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)

Posted by Alexey Petrenko <al...@gmail.com>.
My two cents... :)

Put all the array size checking code in one place is a good idea. Code
reuse is always good idea.

But do not forget that Java has 2 problems here:
1. It can not inline methods or include code in java file
2. Method call is a long operation.

So huge number of additional method calls can significantly downgrade
the performance...

Probably VM JIT guys will correct me.

Anyway... I think that the best plays for such tool methods is a misc
module, not util.

SY, Alexey

2006/7/21, Andrew Zhang <zh...@gmail.com>:
> 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) <ji...@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
>
>


-- 
Alexey A. Petrenko
Intel Middleware Products Division

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org