8080248: Coding regression in HKSCS charsets
To update the sp correctly when encoding supplementary characters
Reviewed-by: martin
diff --git a/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java b/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java
index 07be74d..1e90093 100644
--- a/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java
+++ b/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java
@@ -377,7 +377,6 @@
dst[dp++] = repl[1];
continue;
}
- sp++;
}
if (bb > MAX_SINGLEBYTE) { // DoubleByte
dst[dp++] = (byte)(bb >> 8);
diff --git a/jdk/test/sun/nio/cs/TestStringCoding.java b/jdk/test/sun/nio/cs/TestStringCoding.java
index aaee1bc..4bff4cf 100644
--- a/jdk/test/sun/nio/cs/TestStringCoding.java
+++ b/jdk/test/sun/nio/cs/TestStringCoding.java
@@ -22,7 +22,7 @@
*/
/* @test
- @bug 6636323 6636319 7040220 7096080 7183053
+ @bug 6636323 6636319 7040220 7096080 7183053 8080248
@summary Test if StringCoding and NIO result have the same de/encoding result
* @run main/othervm/timeout=2000 TestStringCoding
*/
@@ -199,6 +199,17 @@
*/
}
+ //encode mappable surrogates for hkscs
+ if (cs.name().equals("Big5-HKSCS") || cs.name().equals("x-MS950-HKSCS")) {
+ String str = "ab\uD840\uDD0Ccd";
+ byte[] expected = new byte[] {(byte)'a', (byte)'b',
+ (byte)0x88, (byte)0x45, (byte)'c', (byte)'d' };
+ if (!Arrays.equals(str.getBytes(cs.name()), expected) ||
+ !Arrays.equals(str.getBytes(cs), expected)) {
+ throw new RuntimeException("encode(surrogates) failed -> "
+ + cs.name());
+ }
+ }
}
static class PermissiveSecurityManger extends SecurityManager {