diff options
author | Tom Tromey <tromey@redhat.com> | 2007-05-02 23:27:03 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2007-05-02 23:27:03 +0000 |
commit | a74e2c64a14cc6dc6f296ce55b712e2f04184011 (patch) | |
tree | 3c0a5c3cdf3e3ce58bc3c73fa45fba97764da564 /libjava | |
parent | 82fd6170a86a3eacac137022a935df27493dadf4 (diff) | |
download | gcc-a74e2c64a14cc6dc6f296ce55b712e2f04184011.zip gcc-a74e2c64a14cc6dc6f296ce55b712e2f04184011.tar.gz gcc-a74e2c64a14cc6dc6f296ce55b712e2f04184011.tar.bz2 |
natCharacter.cc (Character::getType): Handle negative code points.
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=238755
* java/lang/natCharacter.cc (Character::getType): Handle negative
code points.
(Character::toLowerCase): Likewise.
(Character::toUpperCase): Likewise.
(Character::digit): Likewise.
(Character::getNumericValue): Likewise.
(Character::getDirectionality): Likewise.
(Character::toTitleCase): Likewise.
From-SVN: r124370
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 12 | ||||
-rw-r--r-- | libjava/java/lang/natCharacter.cc | 18 |
2 files changed, 20 insertions, 10 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index c8c9aa5..5c6ad81 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,15 @@ +2007-05-02 Tom Tromey <tromey@redhat.com> + + https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=238755 + * java/lang/natCharacter.cc (Character::getType): Handle negative + code points. + (Character::toLowerCase): Likewise. + (Character::toUpperCase): Likewise. + (Character::digit): Likewise. + (Character::getNumericValue): Likewise. + (Character::getDirectionality): Likewise. + (Character::toTitleCase): Likewise. + 2007-04-30 Keith Seitz <keiths@redhat.com> * interpret-run.cc (NEXT_INSN)[DEBUG]: Advance PC before diff --git a/libjava/java/lang/natCharacter.cc b/libjava/java/lang/natCharacter.cc index 8d246dd..dea2086 100644 --- a/libjava/java/lang/natCharacter.cc +++ b/libjava/java/lang/natCharacter.cc @@ -1,5 +1,5 @@ /* java.lang.Character -- Wrapper class for char, and Unicode subsets - Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001, 2002, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -90,7 +90,7 @@ jint java::lang::Character::getType(jint codePoint) { jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) { if (plane > 14 && ((codePoint & 0xffff) < 0xfffe)) return (jint) PRIVATE_TYPE; @@ -112,7 +112,7 @@ jint java::lang::Character::toLowerCase(jint codePoint) { jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) return codePoint; return (lower[plane][readCodePoint(codePoint) >> 7]) + codePoint; } @@ -127,7 +127,7 @@ jint java::lang::Character::toUpperCase(jint codePoint) { jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) return codePoint; return (upper[plane][readCodePoint(codePoint) >> 7]) + codePoint; } @@ -147,7 +147,7 @@ java::lang::Character::toTitleCase(jint codePoint) { // As of Unicode 4.0.0 no characters outside of plane 0 have titlecase // mappings that are different from their uppercase mapping. - if (codePoint < 0x10000) + if (codePoint >= 0 && codePoint < 0x10000) return toTitleCase((jchar)codePoint); return toUpperCase(codePoint); } @@ -177,7 +177,7 @@ java::lang::Character::digit(jint codePoint, jint radix) return (jint) -1; jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) return UNASSIGNED_DIGIT; jchar attr = readCodePoint(codePoint); @@ -207,7 +207,7 @@ jint java::lang::Character::getNumericValue(jint codePoint) { jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) return UNASSIGNED_NUMERIC_VALUE; jshort num = numValue[plane][readCodePoint(codePoint) >> 7]; if (num <= -3) @@ -225,7 +225,7 @@ jbyte java::lang::Character::getDirectionality(jint codePoint) { jint plane = codePoint >> 16; - if (plane > 2 && plane != 14) + if (plane < 0 || (plane > 2 && plane != 14)) { if (plane > 14 && ((codePoint & 0xffff) < 0xfffe)) return (jint) PRIVATE_DIRECTION; @@ -233,5 +233,3 @@ java::lang::Character::getDirectionality(jint codePoint) } return direction[plane][readCodePoint(codePoint) >> 7]; } - - |