On Wed, 2005-11-02 at 12:50 +0100, Jeroen Frijters wrote: > Christian Thalinger wrote: > > + if (offset + count < 0 || offset + count > ascii.length) > > You can write this more efficiently as: > > if (ascii.length - offset < count) > > (This assumes that offset and count have previously been checked to be > non-negative.)
Hi! Sorry for the long delay, but here it is. I left a comment in there so it's clear what we are checking for. Commited as attached. TWISTI 2005-12-06 Christian Thalinger <[EMAIL PROTECTED]> * java/lang/String.java (String): Better out-of-bounds and overflow checks. Index: java/lang/String.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/lang/String.java,v retrieving revision 1.76 diff -u -3 -p -r1.76 String.java --- java/lang/String.java 8 Nov 2005 16:04:49 -0000 1.76 +++ java/lang/String.java 6 Dec 2005 18:47:30 -0000 @@ -273,7 +273,8 @@ public final class String implements Ser throw new StringIndexOutOfBoundsException("offset: " + offset); if (count < 0) throw new StringIndexOutOfBoundsException("count: " + count); - if (offset + count < 0 || offset + count > ascii.length) + // equivalent to: offset + count < 0 || offset + count > ascii.length + if (ascii.length - offset < count) throw new StringIndexOutOfBoundsException("offset + count: " + (offset + count)); value = new char[count]; @@ -338,7 +339,8 @@ public final class String implements Ser throw new StringIndexOutOfBoundsException("offset: " + offset); if (count < 0) throw new StringIndexOutOfBoundsException("count: " + count); - if (offset + count < 0 || offset + count > data.length) + // equivalent to: offset + count < 0 || offset + count > data.length + if (data.length - offset < count) throw new StringIndexOutOfBoundsException("offset + count: " + (offset + count)); try @@ -418,7 +420,8 @@ public final class String implements Ser throw new StringIndexOutOfBoundsException("offset: " + offset); if (count < 0) throw new StringIndexOutOfBoundsException("count: " + count); - if (offset + count < 0 || offset + count > data.length) + // equivalent to: offset + count < 0 || offset + count > data.length + if (data.length - offset < count) throw new StringIndexOutOfBoundsException("offset + count: " + (offset + count)); int o, c; @@ -533,7 +536,8 @@ public final class String implements Ser throw new StringIndexOutOfBoundsException("offset: " + offset); if (count < 0) throw new StringIndexOutOfBoundsException("count: " + count); - if (offset + count < 0 || offset + count > data.length) + // equivalent to: offset + count < 0 || offset + count > data.length + if (data.length - offset < count) throw new StringIndexOutOfBoundsException("offset + count: " + (offset + count)); if (dont_copy) _______________________________________________ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches