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
This commit is contained in:
Dmitry Samersoff 2013-06-05 18:20:34 +04:00
parent c3d380202b
commit ee8568fe00
2 changed files with 13 additions and 4 deletions

View File

@ -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);
}
/**

View File

@ -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);