From ee8568fe00eb413e6ccac74144a202cec5fafb91 Mon Sep 17 00:00:00 2001 From: Dmitry Samersoff Date: Wed, 5 Jun 2013 18:20:34 +0400 Subject: [PATCH] 8015604: JDP packets containing ideographic characters are broken Code uses string length rather than byte array length and non ascii entry brakes packet. Reviewed-by: dholmes, jbachorik, sla --- .../classes/sun/management/jdp/JdpPacketWriter.java | 9 ++++++--- jdk/test/sun/management/jdp/JdpUnitTest.java | 8 +++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jdk/src/share/classes/sun/management/jdp/JdpPacketWriter.java b/jdk/src/share/classes/sun/management/jdp/JdpPacketWriter.java index 2af2fdc0100..f68905b6781 100644 --- a/jdk/src/share/classes/sun/management/jdp/JdpPacketWriter.java +++ b/jdk/src/share/classes/sun/management/jdp/JdpPacketWriter.java @@ -60,9 +60,12 @@ public final class JdpPacketWriter { */ public void addEntry(String entry) throws IOException { - pkt.writeShort(entry.length()); - byte[] b = entry.getBytes("UTF-8"); - pkt.write(b); + /* DataOutputStream.writeUTF() do essentially + * the same as: + * pkt.writeShort(entry.getBytes("UTF-8").length); + * pkt.write(entry.getBytes("UTF-8")); + */ + pkt.writeUTF(entry); } /** diff --git a/jdk/test/sun/management/jdp/JdpUnitTest.java b/jdk/test/sun/management/jdp/JdpUnitTest.java index fed4ae216c2..2bd61407378 100644 --- a/jdk/test/sun/management/jdp/JdpUnitTest.java +++ b/jdk/test/sun/management/jdp/JdpUnitTest.java @@ -32,6 +32,12 @@ import sun.management.jdp.JdpException; public class JdpUnitTest { + + static byte[] russian_name = {(byte)0xd0,(byte)0xbf,(byte)0xd1,(byte)0x80,(byte)0xd0,(byte)0xbe,(byte)0xd0,(byte)0xb2, + (byte)0xd0,(byte)0xb5,(byte)0xd1,(byte)0x80,(byte)0xd0,(byte)0xba,(byte)0xd0,(byte)0xb0, + (byte)0x20,(byte)0xd1,(byte)0x81,(byte)0xd0,(byte)0xb2,(byte)0xd1,(byte)0x8f,(byte)0xd0, + (byte)0xb7,(byte)0xd0,(byte)0xb8,(byte)0x0a}; + /** * This test tests that complete packet is build correctly */ @@ -42,7 +48,7 @@ public class JdpUnitTest { { JdpJmxPacket p1 = new JdpJmxPacket(UUID.randomUUID(), "fake://unit-test"); p1.setMainClass("FakeUnitTest"); - p1.setInstanceName("Fake"); + p1.setInstanceName( new String(russian_name,"UTF-8")); byte[] b = p1.getPacketData(); JdpJmxPacket p2 = new JdpJmxPacket(b);