From ca44436ce6c5bf7a7b58c1842f82a4f6aa3ae2d6 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Thu, 24 Sep 2015 08:33:51 +0200 Subject: [PATCH] [#4265] Not allow to add/set DefaultHttpHeaders to itself. Motivation: We should prevent to add/set DefaultHttpHeaders to itself to prevent unexpected side-effects. Modifications: Throw IllegalArgumentException if user tries to pass the same instance to set/add. Result: No surprising side-effects. --- .../io/netty/handler/codec/http/HttpHeadersTest.java | 12 ++++++++++++ .../java/io/netty/handler/codec/DefaultHeaders.java | 2 +- .../io/netty/handler/codec/DefaultHeadersTest.java | 12 ++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeadersTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeadersTest.java index a94d6f7ebf..ab3dce49d1 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeadersTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeadersTest.java @@ -72,4 +72,16 @@ public class HttpHeadersTest { HttpHeaders headers = new DefaultHttpHeaders(false); headers.set(of("test"), (CharSequence) null); } + + @Test(expected = IllegalArgumentException.class) + public void testAddSelf() { + HttpHeaders headers = new DefaultHttpHeaders(false); + headers.add(headers); + } + + @Test(expected = IllegalArgumentException.class) + public void testSetSelf() { + HttpHeaders headers = new DefaultHttpHeaders(false); + headers.set(headers); + } } diff --git a/codec/src/main/java/io/netty/handler/codec/DefaultHeaders.java b/codec/src/main/java/io/netty/handler/codec/DefaultHeaders.java index 2025ac2bf8..4f18c56146 100644 --- a/codec/src/main/java/io/netty/handler/codec/DefaultHeaders.java +++ b/codec/src/main/java/io/netty/handler/codec/DefaultHeaders.java @@ -540,7 +540,7 @@ public class DefaultHeaders implements Headers { public Headers set(Headers headers) { checkNotNull(headers, "headers"); if (headers == this) { - return this; + throw new IllegalArgumentException("can't add to itself."); } clear(); if (headers instanceof DefaultHeaders) { diff --git a/codec/src/test/java/io/netty/handler/codec/DefaultHeadersTest.java b/codec/src/test/java/io/netty/handler/codec/DefaultHeadersTest.java index 88ce63f87b..472fa3c08e 100644 --- a/codec/src/test/java/io/netty/handler/codec/DefaultHeadersTest.java +++ b/codec/src/test/java/io/netty/handler/codec/DefaultHeadersTest.java @@ -379,6 +379,18 @@ public class DefaultHeadersTest { assertEquals(headers1, expected); } + @Test(expected = IllegalArgumentException.class) + public void testAddSelf() { + Headers headers = newInstance(); + headers.add(headers); + } + + @Test(expected = IllegalArgumentException.class) + public void testSetSelf() { + Headers headers = newInstance(); + headers.set(headers); + } + private ByteString bs(String value) { return new ByteString(value, CharsetUtil.US_ASCII); }