diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java index 0d9433c698..4d165088e6 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java @@ -184,7 +184,11 @@ public final class HttpUtil { public static long getContentLength(HttpMessage message, long defaultValue) { String value = message.headers().get(HttpHeaderNames.CONTENT_LENGTH); if (value != null) { - return Long.parseLong(value); + try { + return Long.parseLong(value); + } catch (NumberFormatException ignore) { + return defaultValue; + } } // We know the content length if it's a Web Socket message even if diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java index 1e9615ce8f..93478d645d 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java @@ -100,4 +100,13 @@ public class HttpUtilTest { message.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html; charset=utf-8"); assertEquals("text/html", HttpUtil.getMimeType(message)); } + + @Test + public void testGetContentLengthDefaultValue() { + HttpMessage message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + assertNull(message.headers().get(HttpHeaderNames.CONTENT_LENGTH)); + message.headers().set(HttpHeaderNames.CONTENT_LENGTH, "bar"); + assertEquals("bar", message.headers().get(HttpHeaderNames.CONTENT_LENGTH)); + assertEquals(1L, HttpUtil.getContentLength(message, 1L)); + } }