Commit a74e2c64 by Tom Tromey Committed by Tom Tromey

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
parent 82fd6170
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> 2007-04-30 Keith Seitz <keiths@redhat.com>
* interpret-run.cc (NEXT_INSN)[DEBUG]: Advance PC before * interpret-run.cc (NEXT_INSN)[DEBUG]: Advance PC before
......
/* java.lang.Character -- Wrapper class for char, and Unicode subsets /* 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. This file is part of GNU Classpath.
...@@ -90,7 +90,7 @@ jint ...@@ -90,7 +90,7 @@ jint
java::lang::Character::getType(jint codePoint) java::lang::Character::getType(jint codePoint)
{ {
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
{ {
if (plane > 14 && ((codePoint & 0xffff) < 0xfffe)) if (plane > 14 && ((codePoint & 0xffff) < 0xfffe))
return (jint) PRIVATE_TYPE; return (jint) PRIVATE_TYPE;
...@@ -112,7 +112,7 @@ jint ...@@ -112,7 +112,7 @@ jint
java::lang::Character::toLowerCase(jint codePoint) java::lang::Character::toLowerCase(jint codePoint)
{ {
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
return codePoint; return codePoint;
return (lower[plane][readCodePoint(codePoint) >> 7]) + codePoint; return (lower[plane][readCodePoint(codePoint) >> 7]) + codePoint;
} }
...@@ -127,7 +127,7 @@ jint ...@@ -127,7 +127,7 @@ jint
java::lang::Character::toUpperCase(jint codePoint) java::lang::Character::toUpperCase(jint codePoint)
{ {
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
return codePoint; return codePoint;
return (upper[plane][readCodePoint(codePoint) >> 7]) + codePoint; return (upper[plane][readCodePoint(codePoint) >> 7]) + codePoint;
} }
...@@ -147,7 +147,7 @@ java::lang::Character::toTitleCase(jint 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 // As of Unicode 4.0.0 no characters outside of plane 0 have titlecase
// mappings that are different from their uppercase mapping. // mappings that are different from their uppercase mapping.
if (codePoint < 0x10000) if (codePoint >= 0 && codePoint < 0x10000)
return toTitleCase((jchar)codePoint); return toTitleCase((jchar)codePoint);
return toUpperCase(codePoint); return toUpperCase(codePoint);
} }
...@@ -177,7 +177,7 @@ java::lang::Character::digit(jint codePoint, jint radix) ...@@ -177,7 +177,7 @@ java::lang::Character::digit(jint codePoint, jint radix)
return (jint) -1; return (jint) -1;
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
return UNASSIGNED_DIGIT; return UNASSIGNED_DIGIT;
jchar attr = readCodePoint(codePoint); jchar attr = readCodePoint(codePoint);
...@@ -207,7 +207,7 @@ jint ...@@ -207,7 +207,7 @@ jint
java::lang::Character::getNumericValue(jint codePoint) java::lang::Character::getNumericValue(jint codePoint)
{ {
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
return UNASSIGNED_NUMERIC_VALUE; return UNASSIGNED_NUMERIC_VALUE;
jshort num = numValue[plane][readCodePoint(codePoint) >> 7]; jshort num = numValue[plane][readCodePoint(codePoint) >> 7];
if (num <= -3) if (num <= -3)
...@@ -225,7 +225,7 @@ jbyte ...@@ -225,7 +225,7 @@ jbyte
java::lang::Character::getDirectionality(jint codePoint) java::lang::Character::getDirectionality(jint codePoint)
{ {
jint plane = codePoint >> 16; jint plane = codePoint >> 16;
if (plane > 2 && plane != 14) if (plane < 0 || (plane > 2 && plane != 14))
{ {
if (plane > 14 && ((codePoint & 0xffff) < 0xfffe)) if (plane > 14 && ((codePoint & 0xffff) < 0xfffe))
return (jint) PRIVATE_DIRECTION; return (jint) PRIVATE_DIRECTION;
...@@ -233,5 +233,3 @@ java::lang::Character::getDirectionality(jint codePoint) ...@@ -233,5 +233,3 @@ java::lang::Character::getDirectionality(jint codePoint)
} }
return direction[plane][readCodePoint(codePoint) >> 7]; return direction[plane][readCodePoint(codePoint) >> 7];
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment