diff --git a/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageDecoder.java b/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageDecoder.java index b43e80b2d1..7adfbc897f 100644 --- a/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageDecoder.java +++ b/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageDecoder.java @@ -395,31 +395,37 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder= maxHeaderSize) { - throw new TooLongFrameException( - "HTTP header is larger than " + - maxHeaderSize + " bytes."); - } + loop: + for (;;) { + char nextByte = (char) buffer.readByte(); + headerSize ++; + + switch (nextByte) { + case HttpCodecUtil.CR: + nextByte = (char) buffer.readByte(); headerSize ++; - sb.append((char) nextByte); + if (nextByte == HttpCodecUtil.LF) { + break loop; + } + break; + case HttpCodecUtil.LF: + break loop; } + + // Abort decoding if the header part is too large. + if (headerSize >= maxHeaderSize) { + throw new TooLongFrameException( + "HTTP header is larger than " + + maxHeaderSize + " bytes."); + + } + + sb.append(nextByte); } + + this.headerSize = headerSize; + return sb.toString(); } protected abstract boolean isDecodingRequest();