SPDY: SpdyFrameDecoder should buffer unread data when decoding headers

This commit is contained in:
Jeff Pinner 2013-06-28 00:44:06 -07:00 committed by Trustin Lee
parent 7654d3df02
commit b3ace85773

View File

@ -232,10 +232,10 @@ public class SpdyFrameDecoder extends FrameDecoder {
case READ_HEADER_BLOCK:
int compressedBytes = Math.min(buffer.readableBytes(), length);
length -= compressedBytes;
ChannelBuffer compressed = buffer.slice(buffer.readerIndex(), compressedBytes);
try {
headerBlockDecoder.decode(buffer.readSlice(compressedBytes), spdyHeadersFrame);
headerBlockDecoder.decode(compressed, spdyHeadersFrame);
} catch (Exception e) {
state = State.FRAME_ERROR;
spdyHeadersFrame = null;
@ -243,6 +243,10 @@ public class SpdyFrameDecoder extends FrameDecoder {
return null;
}
int readBytes = compressedBytes - compressed.readableBytes();
buffer.skipBytes(readBytes);
length -= readBytes;
if (spdyHeadersFrame != null &&
(spdyHeadersFrame.isInvalid() || spdyHeadersFrame.isTruncated())) {
Object frame = spdyHeadersFrame;