From cf8f6e3e2f608f3ac35b1cdf34934bd885108dd0 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 27 Sep 2016 05:50:14 +0200 Subject: [PATCH] [#5861] HttpUtil.getContentLength(HttpMessage, long) throws unexpected NumberFormatException Motivation: The Javadocs of HttpUtil.getContentLength(HttpMessage, long) and its int overload state that the provided default value is returned if the Content-Length value is not a number. NumberFormatException is thrown instead. Modifications: Correctly handle when the value is not a number. Result: API works as stated in javadocs. --- .../main/java/io/netty/handler/codec/http/HttpUtil.java | 6 +++++- .../java/io/netty/handler/codec/http/HttpUtilTest.java | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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)); + } }