Skip to content

Commit

Permalink
Filter out null WebSocketSession attributes
Browse files Browse the repository at this point in the history
Closes gh-29315
  • Loading branch information
rstoyanchev committed Nov 11, 2022
1 parent db9e89f commit 8ade083
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -73,9 +73,12 @@ protected AbstractWebSocketSession(T delegate, String id, HandshakeInfo info, Da
this.id = id;
this.handshakeInfo = info;
this.bufferFactory = bufferFactory;
this.attributes.putAll(info.getAttributes());
this.logPrefix = initLogPrefix(info, id);

info.getAttributes().entrySet().stream()
.filter(entry -> (entry.getKey() != null && entry.getValue() != null))
.forEach(entry -> this.attributes.put(entry.getKey(), entry.getValue()));

if (logger.isDebugEnabled()) {
logger.debug(getLogPrefix() + "Session id \"" + getId() + "\" for " + getHandshakeInfo().getUri());
}
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -62,7 +62,9 @@ public abstract class AbstractWebSocketSession<T> implements NativeWebSocketSess
*/
public AbstractWebSocketSession(@Nullable Map<String, Object> attributes) {
if (attributes != null) {
this.attributes.putAll(attributes);
attributes.entrySet().stream()
.filter(entry -> (entry.getKey() != null && entry.getValue() != null))
.forEach(entry -> this.attributes.put(entry.getKey(), entry.getValue()));
}
}

Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -37,6 +37,7 @@
*
* @author Rossen Stoyanchev
*/
@SuppressWarnings("resource")
public class StandardWebSocketSessionTests {

private final HttpHeaders headers = new HttpHeaders();
Expand All @@ -54,7 +55,6 @@ public void getPrincipalWithConstructorArg() {
}

@Test
@SuppressWarnings("resource")
public void getPrincipalWithNativeSession() {
TestPrincipal user = new TestPrincipal("joe");

Expand All @@ -68,7 +68,6 @@ public void getPrincipalWithNativeSession() {
}

@Test
@SuppressWarnings("resource")
public void getPrincipalNone() {
Session nativeSession = Mockito.mock(Session.class);
given(nativeSession.getUserPrincipal()).willReturn(null);
Expand All @@ -83,7 +82,6 @@ public void getPrincipalNone() {
}

@Test
@SuppressWarnings("resource")
public void getAcceptedProtocol() {
String protocol = "foo";

Expand All @@ -99,4 +97,14 @@ public void getAcceptedProtocol() {
verifyNoMoreInteractions(nativeSession);
}

@Test // gh-29315
public void addAttributesWithNullKeyOrValue() {
this.attributes.put(null, "value");
this.attributes.put("key", null);
this.attributes.put("foo", "bar");

assertThat(new StandardWebSocketSession(this.headers, this.attributes, null, null).getAttributes())
.hasSize(1).containsEntry("foo", "bar");
}

}

0 comments on commit 8ade083

Please sign in to comment.