diff options
author | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-09 22:25:54 +0000 |
---|---|---|
committer | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-09 22:25:54 +0000 |
commit | c843840fa3eb6f283bffaaed942c9243047ea10b (patch) | |
tree | 643466db439a80706c0651653ca6f845432f490d /libjava/java | |
parent | b8f617cc83c2bdc34c7f73664f18f1bd562af225 (diff) | |
download | gcc-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.cc | 39 |
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; } |