summaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorgreen <green@138bc75d-0d04-0410-961f-82ee72b054a4>2000-01-09 22:25:54 +0000
committergreen <green@138bc75d-0d04-0410-961f-82ee72b054a4>2000-01-09 22:25:54 +0000
commitc843840fa3eb6f283bffaaed942c9243047ea10b (patch)
tree643466db439a80706c0651653ca6f845432f490d /libjava/java
parentb8f617cc83c2bdc34c7f73664f18f1bd562af225 (diff)
downloadgcc-c843840fa3eb6f283bffaaed942c9243047ea10b.tar.gz
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. * configure.host (ligcj_interpreter): New variable. Enable interpreter by default on IA-32. * configure.in: Examine libgcj_interpreter. * configure: Rebuilt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31300 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/natString.cc39
1 files changed, 23 insertions, 16 deletions
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc
index 88168e33ab7..b5061d21a71 100644
--- a/libjava/java/lang/natString.cc
+++ b/libjava/java/lang/natString.cc
@@ -328,7 +328,8 @@ java::lang::String::init(jcharArray chars, jint offset, jint count,
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 @@ java::lang::String::getChars(jint srcBegin, jint srcEnd,
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 @@ java::lang::String::getBytes(jint srcBegin, jint srcEnd,
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 @@ java::lang::String::regionMatches (jboolean ignoreCase, jint toffset,
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;
}