Patches for java.lang.String
Anthony Green
green@cygnus.com
Sun Jan 9 14:19:00 GMT 2000
I'm committing the following changes to natString.cc based on mauve
test results:
2000-01-09 Anthony Green <green@cygnus.com>
* java/lang/natString.cc (init): Test for overflow condition
during out of bounds check.
(getChars): Throw StringIndexOutOfBoundsException, not
ArrayIndexOutOfBoundsException.
(getBytes): Ditto.
(regionMatches): Obey case option during string comparison.
Index: libjava/java/lang/natString.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/lang/natString.cc,v
retrieving revision 1.8
diff -u -r1.8 natString.cc
--- natString.cc 1999/12/02 19:59:30 1.8
+++ natString.cc 2000/01/09 22:13:18
@@ -328,7 +328,8 @@
if (! chars)
JvThrow (new NullPointerException);
jsize data_size = JvGetArrayLength (chars);
- if (offset < 0 || count < 0 || offset + count > data_size)
+ if (offset < 0 || count < 0 || offset + count < 0
+ || offset + count > data_size)
JvThrow (new StringIndexOutOfBoundsException());
jcharArray array;
jchar *pdst;
@@ -451,7 +452,7 @@
jint dst_length = JvGetArrayLength (dst);
if (srcBegin < 0 || srcBegin > srcEnd || srcEnd > count
|| dstBegin < 0 || dstBegin + (srcEnd-srcBegin) > dst_length)
- JvThrow (new java::lang::ArrayIndexOutOfBoundsException());
+ JvThrow (new java::lang::StringIndexOutOfBoundsException());
register jchar *dPtr = elements (dst) + dstBegin;
register jchar *sPtr = JvGetStringChars (this) + srcBegin;
register jint i = srcEnd-srcBegin;
@@ -501,7 +502,7 @@
jint dst_length = JvGetArrayLength (dst);
if (srcBegin < 0 || srcBegin > srcEnd || srcEnd > count
|| dstBegin < 0 || dstBegin + (srcEnd-srcBegin) > dst_length)
- JvThrow (new java::lang::ArrayIndexOutOfBoundsException());
+ JvThrow (new java::lang::StringIndexOutOfBoundsException());
register jbyte *dPtr = elements (dst) + dstBegin;
register jchar *sPtr = JvGetStringChars (this) + srcBegin;
register jint i = srcEnd-srcBegin;
@@ -591,19 +592,25 @@
register jchar *tptr = JvGetStringChars (this) + toffset;
register jchar *optr = JvGetStringChars (other) + ooffset;
register jint i = len;
- while (--i >= 0)
- {
- jchar tch = *tptr++;
- jchar och = *optr++;
- if (tch != och)
- return false;
- if (ignoreCase
- && (java::lang::Character::toLowerCase (tch)
- != java::lang::Character::toLowerCase (och))
- && (java::lang::Character::toUpperCase (tch)
- != java::lang::Character::toUpperCase (och)))
- return false;
- }
+ if (ignoreCase)
+ while (--i >= 0)
+ {
+ jchar tch = *tptr++;
+ jchar och = *optr++;
+ if ((java::lang::Character::toLowerCase (tch)
+ != java::lang::Character::toLowerCase (och))
+ && (java::lang::Character::toUpperCase (tch)
+ != java::lang::Character::toUpperCase (och)))
+ return false;
+ }
+ else
+ while (--i >= 0)
+ {
+ jchar tch = *tptr++;
+ jchar och = *optr++;
+ if (tch != och)
+ return false;
+ }
return true;
}
--
Anthony Green Cygnus Solutions
Sunnyvale, California
More information about the Java-patches
mailing list