diff -r 874e25a9844a -r 5ebcfc3cebe4 jdk/src/share/classes/sun/nio/cs/CharsetMapping.java --- a/jdk/src/share/classes/sun/nio/cs/CharsetMapping.java Thu Jun 05 13:42:47 2008 +0200 +++ b/jdk/src/share/classes/sun/nio/cs/CharsetMapping.java Thu Jun 05 16:19:27 2008 -0700 @@ -37,7 +37,7 @@ public class CharsetMapping { public final static char UNMAPPABLE_DECODING = '\uFFFD'; - public final static int UNMAPPABLE_ENCODING = -1; + public final static int UNMAPPABLE_ENCODING = 0xFFFD; char[] b2cSB; //singlebyte b->c char[] b2cDB1; //dobulebyte b->c /db1 @@ -109,9 +109,11 @@ } public int encodeSurrogate(char hi, char lo) { - char c = (char)Character.toCodePoint(hi, lo); + int cp = Character.toCodePoint(hi, lo); + if (cp < 0x20000 || cp >= 0x30000) + return UNMAPPABLE_ENCODING; int end = c2bSupp.length / 2; - int i = Arrays.binarySearch(c2bSupp, 0, end, c); + int i = Arrays.binarySearch(c2bSupp, 0, end, (char)cp); if (i >= 0) return c2bSupp[end + i]; return UNMAPPABLE_ENCODING;