From 11824893a91c2f2023fc2f2e0fce7bd0d93351f4 Mon Sep 17 00:00:00 2001 From: Josh King Date: Tue, 9 Jun 2015 14:06:46 -0700 Subject: [PATCH 1/2] Header values are optional in Stomp 1.1 and 1.2 --- .../messaging/simp/stomp/StompDecoder.java | 6 +++--- .../messaging/simp/stomp/StompCodecTests.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java index d279aa59e8..af3b623650 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java @@ -215,10 +215,10 @@ public class StompDecoder { if (headerStream.size() > 0) { String header = new String(headerStream.toByteArray(), UTF8_CHARSET); int colonIndex = header.indexOf(':'); - if (colonIndex <= 0 || colonIndex == header.length() - 1) { - if (buffer.remaining() > 0) { + if (colonIndex <= 0) { + if(buffer.remaining() > 0) { throw new StompConversionException("Illegal header: '" + header + - "'. A header must be of the form :."); + "'. A header must be of the form :[]."); } } else { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java index dce4e85f64..3cbd32b0ec 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java @@ -188,6 +188,23 @@ public class StompCodecTests { assertEquals(StompCommand.DISCONNECT, StompHeaderAccessor.wrap(messages.get(1)).getCommand()); } + @Test + public void decodeFrameWithHeaderWithEmptyValue() { + String accept = "accept-version:1.1\n"; + String valuelessKey = "key:\n"; + + Message frame = decode("CONNECT\n" + accept + valuelessKey + "\n\0"); + StompHeaderAccessor headers = StompHeaderAccessor.wrap(frame); + + assertEquals(StompCommand.CONNECT, headers.getCommand()); + + assertEquals(2, headers.toNativeHeaderMap().size()); + assertEquals("1.1", headers.getFirstNativeHeader("accept-version")); + assertEquals("", headers.getFirstNativeHeader("key")); + + assertEquals(0, frame.getPayload().length); + } + @Test public void decodeFrameWithIncompleteCommand() { assertIncompleteDecode("MESSAG"); From 1153969ea28d441156dcd4486c13397b2b374219 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 15 Jun 2015 14:41:33 -0400 Subject: [PATCH 2/2] Polish --- .../messaging/simp/stomp/StompDecoder.java | 2 +- .../messaging/simp/stomp/StompCodecTests.java | 18 +++++------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java index af3b623650..ab8201a48b 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java index 3cbd32b0ec..3da0df98f9 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -176,18 +176,15 @@ public class StompCodecTests { Buffer buffer = Buffer.wrap(frame1 + frame2); final List> messages = new ArrayList>(); - new Reactor2StompCodec().decoder(new Consumer>() { - @Override - public void accept(Message message) { - messages.add(message); - } - }).apply(buffer); + new Reactor2StompCodec().decoder(messages::add).apply(buffer); assertEquals(2, messages.size()); assertEquals(StompCommand.SEND, StompHeaderAccessor.wrap(messages.get(0)).getCommand()); assertEquals(StompCommand.DISCONNECT, StompHeaderAccessor.wrap(messages.get(1)).getCommand()); } + // SPR-13111 + @Test public void decodeFrameWithHeaderWithEmptyValue() { String accept = "accept-version:1.1\n"; @@ -251,12 +248,7 @@ public class StompCodecTests { Buffer buffer = Buffer.wrap(frame); final List> messages = new ArrayList>(); - new Reactor2StompCodec().decoder(new Consumer>() { - @Override - public void accept(Message message) { - messages.add(message); - } - }).apply(buffer); + new Reactor2StompCodec().decoder(messages::add).apply(buffer); assertEquals(1, messages.size()); assertEquals(SimpMessageType.HEARTBEAT, StompHeaderAccessor.wrap(messages.get(0)).getMessageType());