diff -up frysk-0.4/frysk-sys/frysk/sys/cni/Errno.cxx.gccjint frysk-0.4/frysk-sys/frysk/sys/cni/Errno.cxx --- frysk-0.4/frysk-sys/frysk/sys/cni/Errno.cxx.gccjint 2010-03-29 17:19:01.000000000 -0400 +++ frysk-0.4/frysk-sys/frysk/sys/cni/Errno.cxx 2010-03-29 17:22:06.000000000 -0400 @@ -291,8 +291,15 @@ verifyBounds (jbyteArray bytes, jint sta throw new java::lang::ArrayIndexOutOfBoundsException (); if (length < 0) throw new java::lang::ArrayIndexOutOfBoundsException (); - if (start + length < 0) +#if 0 + jint end = start + length; +#else + // Work around GCC bug where test for (MAX_INT+1)<0 fails - the + // arrithmetic should have wrapped the value to -ve. + long end = start + length; +#endif + if (end < 0) throw new java::lang::ArrayIndexOutOfBoundsException (); - if (start + length > bytes->length) + if (end > bytes->length) throw new java::lang::ArrayIndexOutOfBoundsException (); }