Skip to content

Commit fe26b7d

Browse files
committed
Fix NPE when calling NettyHeadersAdapter.add()
Prior to this commit, the `NettyHeadersAdapter` would directly delegate the `add()` and `set()` calls to the adapted `io.netty.handler.codec.http.HttpHeaders`. This implementation rejects `null` values with exceptions. This commit aligns the behavior here with other implementations, by not rejecting null values but simply ignoring them. Fixes gh-26277 (cherry-picked from commit 83c19cd)
1 parent cfdceae commit fe26b7d

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ public String getFirst(String key) {
5454

5555
@Override
5656
public void add(String key, @Nullable String value) {
57-
this.headers.add(key, value);
57+
if (value != null) {
58+
this.headers.add(key, value);
59+
}
5860
}
5961

6062
@Override
@@ -69,7 +71,9 @@ public void addAll(MultiValueMap<String, String> values) {
6971

7072
@Override
7173
public void set(String key, @Nullable String value) {
72-
this.headers.set(key, value);
74+
if (value != null) {
75+
this.headers.set(key, value);
76+
}
7377
}
7478

7579
@Override

spring-web/src/test/java/org/springframework/http/server/reactive/HeadersAdaptersTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ void putShouldOverrideExisting(String displayName, MultiValueMap<String, String>
9494
assertThat(headers.get("TestHeader").size()).isEqualTo(1);
9595
}
9696

97+
@ParameterizedHeadersTest
98+
void nullValuesShouldNotFail(String displayName, MultiValueMap<String, String> headers) {
99+
headers.add("TestHeader", null);
100+
assertThat(headers.getFirst("TestHeader")).isNull();
101+
headers.set("TestHeader", null);
102+
assertThat(headers.getFirst("TestHeader")).isNull();
103+
}
104+
97105
@Retention(RetentionPolicy.RUNTIME)
98106
@Target(ElementType.METHOD)
99107
@ParameterizedTest(name = "[{index}] {0}")

0 commit comments

Comments
 (0)