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