[#1595] Fix IllegalStateException thrown by HttpObjectEncoder when an empty HttpContent was written

This commit is contained in:
Norman Maurer 2013-07-17 12:01:50 +02:00
parent b9bae2b5e4
commit 66c4c07ec0

View File

@ -16,6 +16,7 @@
package io.netty.handler.codec.http; package io.netty.handler.codec.http;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageEncoder; import io.netty.handler.codec.MessageToMessageEncoder;
import io.netty.util.CharsetUtil; import io.netty.util.CharsetUtil;
@ -81,6 +82,10 @@ public abstract class HttpObjectEncoder<H extends HttpMessage> extends MessageTo
if (state == ST_CONTENT_NON_CHUNK) { if (state == ST_CONTENT_NON_CHUNK) {
if (contentLength > 0) { if (contentLength > 0) {
out.add(content.retain()); out.add(content.retain());
} else {
// Need to produce some output otherwise an
// IllegalstateException will be thrown
out.add(Unpooled.EMPTY_BUFFER);
} }
if (chunk instanceof LastHttpContent) { if (chunk instanceof LastHttpContent) {
@ -110,6 +115,12 @@ public abstract class HttpObjectEncoder<H extends HttpMessage> extends MessageTo
} }
state = ST_INIT; state = ST_INIT;
} else {
if (contentLength == 0) {
// Need to produce some output otherwise an
// IllegalstateException will be thrown
out.add(Unpooled.EMPTY_BUFFER);
}
} }
} else { } else {
throw new Error(); throw new Error();