Author: markt
Date: Sat Sep 19 07:36:27 2015
New Revision: 1703948
URL: http://svn.apache.org/viewvc?rev=1703948&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58414
Don't try and compress zero length messages
Expand the unit test to cover this case
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1703948&r1=1703947&r2=1703948&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Sat
Sep 19 07:36:27 2015
@@ -321,6 +321,10 @@ public class PerMessageDeflate implement
// Control messages can appear in the middle of other messages
// and must not be compressed. Pass it straight through
allCompressedParts.add(uncompressedPart);
+ } else if (uncompressedPart.getPayload().limit() == 0) {
+ // Zero length messages can't be compressed so pass them
+ // straight through.
+ allCompressedParts.add(uncompressedPart);
} else {
List<MessagePart> compressedParts = new ArrayList<>();
ByteBuffer uncompressedPayload = uncompressedPart.getPayload();
Modified:
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1703948&r1=1703947&r2=1703948&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
Sat Sep 19 07:36:27 2015
@@ -939,17 +939,29 @@ public class TestWsWebSocketContainer ex
@Test
public void testPerMessageDefalteClient01() throws Exception {
- doTestPerMessageDefalteClient01(MESSAGE_STRING_1);
+ doTestPerMessageDefalteClient(MESSAGE_STRING_1, 1);
}
@Test
public void testPerMessageDefalteClient02() throws Exception {
- doTestPerMessageDefalteClient01(MESSAGE_EMPTY);
+ doTestPerMessageDefalteClient(MESSAGE_EMPTY, 1);
}
- private void doTestPerMessageDefalteClient01(String msg) throws Exception {
+ @Test
+ public void testPerMessageDefalteClient03() throws Exception {
+ doTestPerMessageDefalteClient(MESSAGE_STRING_1, 2);
+ }
+
+
+ @Test
+ public void testPerMessageDefalteClient04() throws Exception {
+ doTestPerMessageDefalteClient(MESSAGE_EMPTY, 2);
+ }
+
+
+ private void doTestPerMessageDefalteClient(String msg, int count) throws
Exception {
Tomcat tomcat = getTomcatInstance();
// No file system docBase required
Context ctx = tomcat.addContext("", null);
@@ -973,19 +985,17 @@ public class TestWsWebSocketContainer ex
clientConfig,
new URI("ws://localhost:" + getPort() +
TesterEchoServer.Config.PATH_ASYNC));
- CountDownLatch latch = new CountDownLatch(1);
- BasicText handler = new BasicText(latch);
+ CountDownLatch latch = new CountDownLatch(count);
+ BasicText handler = new BasicText(latch, msg);
wsSession.addMessageHandler(handler);
- wsSession.getBasicRemote().sendText(msg);
+ for (int i = 0; i < count; i++) {
+ wsSession.getBasicRemote().sendText(msg);
+ }
boolean latchResult = handler.getLatch().await(10, TimeUnit.SECONDS);
Assert.assertTrue(latchResult);
- Queue<String> messages = handler.getMessages();
- Assert.assertEquals(1, messages.size());
- Assert.assertEquals(msg, messages.peek());
-
((WsWebSocketContainer) wsContainer).destroy();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]