GH-236: EmbeddedHeadersMessageConverter Multibyte

Fixes #236

Buffer overflow when converting multi-byte characters from
Unicode to UTF-8.
This commit is contained in:
Gary Russell
2015-12-17 16:55:20 -05:00
committed by Marius Bogoevici
parent cd8a9ffd16
commit 2672858982
2 changed files with 20 additions and 2 deletions

View File

@@ -63,9 +63,9 @@ public class EmbeddedHeadersMessageConverter {
: original.get(header);
if (value != null) {
String json = this.objectMapper.toJson(value);
headerValues[n++] = json.getBytes("UTF-8");
headerValues[n] = json.getBytes("UTF-8");
headerCount++;
headersLength += header.length() + json.length();
headersLength += header.length() + headerValues[n++].length;
}
else {
headerValues[n++] = null;

View File

@@ -53,6 +53,24 @@ public class MessageConverterTests {
assertEquals("quxx", extracted.get("baz"));
}
@Test
public void testUnicodeHeader() throws Exception {
EmbeddedHeadersMessageConverter converter = new EmbeddedHeadersMessageConverter();
Message<byte[]> message = MessageBuilder.withPayload("Hello".getBytes())
.setHeader("foo", "bar")
.setHeader("baz", "ØØØØØØØØ")
.build();
byte[] embedded = converter.embedHeaders(new MessageValues(message), "foo", "baz");
assertEquals(0xff, embedded[0] & 0xff);
assertEquals("\u0002\u0003foo\u0000\u0000\u0000\u0005\"bar\"\u0003baz\u0000\u0000\u0000\u0012\"ØØØØØØØØ\"Hello",
new String(embedded, "UTF-8").substring(1));
MessageValues extracted = converter.extractHeaders(MessageBuilder.withPayload(embedded).build(), false);
assertEquals("Hello", new String((byte[])extracted.getPayload()));
assertEquals("bar", extracted.get("foo"));
assertEquals("ØØØØØØØØ", extracted.get("baz"));
}
@Test
public void testHeaderEmbeddingMissingHeader() throws Exception {
EmbeddedHeadersMessageConverter converter = new EmbeddedHeadersMessageConverter();