From 68089535612fa44c1a6a3da1ed18bcbc608e7f1d Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 15 Jan 2016 16:26:02 -0700 Subject: 485469 - permessage-deflate extension causes protocol error in Firefox/Chrome + Correcting behavior for RFC7692: Section 7.2.3.6 (permessage-deflate empty fin) --- .../common/extensions/compress/CompressExtension.java | 10 ++++++---- .../common/extensions/compress/PerMessageDeflateExtension.java | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'jetty-websocket') diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java index 6fc9b538fc..ac32ad6d72 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/CompressExtension.java @@ -407,12 +407,13 @@ public abstract class CompressExtension extends AbstractExtension { Frame frame = entry.frame; BatchMode batchMode = entry.batchMode; - if (OpCode.isControlFrame(frame.getOpCode()) || !frame.hasPayload()) + if (OpCode.isControlFrame(frame.getOpCode())) { + // Do not deflate control frames nextOutgoingFrame(frame,this,batchMode); return; } - + compress(entry,true); } @@ -434,7 +435,7 @@ public abstract class CompressExtension extends AbstractExtension // no input supplied needsCompress = false; } - + ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] output = new byte[outputLength]; @@ -486,7 +487,8 @@ public abstract class CompressExtension extends AbstractExtension } else if (fin) { - // Special case: 8.2.3.6. Generating an Empty Fragment Manually + // Special case: 7.2.3.6. Generating an Empty Fragment Manually + // https://tools.ietf.org/html/rfc7692#section-7.2.3.6 payload = ByteBuffer.wrap(new byte[] { 0x00 }); } diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/PerMessageDeflateExtension.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/PerMessageDeflateExtension.java index c307e5356b..93ea4fbcbf 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/PerMessageDeflateExtension.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/compress/PerMessageDeflateExtension.java @@ -33,7 +33,7 @@ import org.eclipse.jetty.websocket.common.OpCode; /** * Per Message Deflate Compression extension for WebSocket. *

- * Attempts to follow draft-ietf-hybi-permessage-compression-12 + * Attempts to follow Compression Extensions for WebSocket */ public class PerMessageDeflateExtension extends CompressExtension { -- cgit v1.2.3