Mercurial > hg > Members > sugi > MessagePack-java
diff src/test/java/org/msgpack/unpacker/TestMalformedEncoding.java @ 0:cb825acd883a
first commit
author | sugi |
---|---|
date | Sat, 18 Oct 2014 15:06:15 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/org/msgpack/unpacker/TestMalformedEncoding.java Sat Oct 18 15:06:15 2014 +0900 @@ -0,0 +1,131 @@ +package org.msgpack.unpacker; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.nio.charset.CharacterCodingException; + +import org.junit.Test; +import org.msgpack.MessagePack; +import org.msgpack.MessageTypeException; +import org.msgpack.packer.Packer; +import org.msgpack.packer.BufferPacker; +import org.msgpack.unpacker.Unpacker; +import org.msgpack.unpacker.Converter; +import org.msgpack.type.RawValue; +import org.msgpack.type.ValueFactory; +import org.msgpack.util.json.JSON; + +public class TestMalformedEncoding { + private byte[][] malforms = new byte[][] { { (byte) 0xc0, (byte) 0xaf }, // '/' + // in + // 2 + // bytes + { (byte) 0xe0, (byte) 0x80, (byte) 0xaf } // '/' in 3 bytes + }; + + @Test + public void testRawValueGetString() throws Exception { + for (byte[] malform : malforms) { + RawValue r = ValueFactory.createRawValue(malform); + try { + r.getString(); + fail("no exception"); + } catch (MessageTypeException expected) { + } + byte[] a = r.getByteArray(); + assertArrayEquals(malform, a); + } + } + + @Test + public void testBufferUnpackerUnpackString() throws Exception { + for (byte[] malform : malforms) { + MessagePack msgpack = new MessagePack(); + BufferPacker pk = msgpack.createBufferPacker(); + pk.write(malform); + byte[] b = pk.toByteArray(); + Unpacker u = msgpack.createBufferUnpacker(b); + try { + u.readString(); + fail("no exception"); + } catch (MessageTypeException expected) { + } + byte[] a = u.readByteArray(); + assertArrayEquals(malform, a); + } + } + + @Test + public void testUnpackerUnpackString() throws Exception { + for (byte[] malform : malforms) { + MessagePack msgpack = new MessagePack(); + BufferPacker pk = msgpack.createBufferPacker(); + pk.write(malform); + byte[] b = pk.toByteArray(); + Unpacker u = msgpack.createUnpacker(new ByteArrayInputStream(b)); + try { + u.readString(); + fail("no exception"); + } catch (MessageTypeException expected) { + } + byte[] a = u.readByteArray(); + assertArrayEquals(malform, a); + } + } + + @Test + public void testConverterUnpackString() throws Exception { + for (byte[] malform : malforms) { + MessagePack msgpack = new MessagePack(); + RawValue r = ValueFactory.createRawValue(malform); + Converter u = new Converter(msgpack, r); + try { + u.readString(); + fail("no exception"); + } catch (MessageTypeException expected) { + } + byte[] a = u.readByteArray(); + assertArrayEquals(malform, a); + } + } + + @Test + public void testJSONPackerWriteString() throws Exception { + for (byte[] malform : malforms) { + JSON json = new JSON(); + Packer pk = json.createPacker(new ByteArrayOutputStream()); + try { + pk.write(malform); + fail("no exception"); + } catch (CharacterCodingException expected) { + } + } + } + + @Test + public void testJSONBufferPackerWriteString() throws Exception { + for (byte[] malform : malforms) { + JSON json = new JSON(); + Packer pk = json.createBufferPacker(); + try { + pk.write(malform); + fail("no exception"); + } catch (CharacterCodingException expected) { + } + } + } + + @Test + public void testValueToString() throws Exception { + for (byte[] malform : malforms) { + RawValue r = ValueFactory.createRawValue(malform); + String str = r.toString(); + // malformed bytes will be ignored + assertEquals("\"\"", str); + } + } +}