GH-236: EmbeddedHeadersMessageConverter Multibyte
Fixes #236 Buffer overflow when converting multi-byte characters from Unicode to UTF-8.
This commit is contained in:
committed by
Marius Bogoevici
parent
cd8a9ffd16
commit
2672858982
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user