changeset 10823:32f149f8fbc0

8080248: Coding regression in HKSCS charsets Summary: to update the sp correctly when encoding supplementary characters Reviewed-by: martin
author sherman
date Thu, 21 May 2015 15:42:30 -0700
parents b62d4e2d55e3
children 608656dfa6ab
files src/share/classes/sun/nio/cs/ext/HKSCS.java test/sun/nio/cs/TestStringCoding.java
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/sun/nio/cs/ext/HKSCS.java	Thu Jun 11 13:08:06 2015 +0100
+++ b/src/share/classes/sun/nio/cs/ext/HKSCS.java	Thu May 21 15:42:30 2015 -0700
@@ -377,7 +377,6 @@
                             dst[dp++] = repl[1];
                         continue;
                     }
-                    sp++;
                 }
                 if (bb > MAX_SINGLEBYTE) {        // DoubleByte
                     dst[dp++] = (byte)(bb >> 8);
--- a/test/sun/nio/cs/TestStringCoding.java	Thu Jun 11 13:08:06 2015 +0100
+++ b/test/sun/nio/cs/TestStringCoding.java	Thu May 21 15:42:30 2015 -0700
@@ -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 {