diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java index c3ddf8a894a..bd157bd5f80 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -224,6 +224,7 @@ public class SimpMessagingTemplate extends AbstractMessageSendingTemplate sessionIds = Collections.singleton(sessionId); return new ParseResult(sourceDestination, actualDestination, sourceDestination, sessionIds, user); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java index 7b4343aac88..2062f7ceafa 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java @@ -36,6 +36,7 @@ import org.springframework.messaging.support.NativeMessageHeaderAccessor; import org.springframework.util.LinkedMultiValueMap; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; /** * Unit tests for {@link org.springframework.messaging.simp.SimpMessagingTemplate}. @@ -86,6 +87,12 @@ public class SimpMessagingTemplateTests { assertThat(headerAccessor.getDestination()).isEqualTo("/user/https:%2F%2Fjoe.openid.example.org%2F/queue/foo"); } + @Test // gh-23836 + public void convertAndSendToUserWithInvalidSequence() { + assertThatIllegalArgumentException().isThrownBy(() -> + this.messagingTemplate.convertAndSendToUser("joe%2F", "/queue/foo", "data")); + } + @Test public void convertAndSendWithCustomHeader() { Map headers = Collections.singletonMap("key", "value"); diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolverTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolverTests.java index c2887f5d1b2..888afe23960 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolverTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolverTests.java @@ -29,6 +29,7 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.StringUtils; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -113,6 +114,15 @@ public class DefaultUserDestinationResolverTests { assertThat(actual.getUser()).isNull(); } + @Test // gh-23836 + public void handleSubscribeInvalidUserName() { + TestPrincipal user = new TestPrincipal("joe%2F"); + String sourceDestination = "/user/queue/foo"; + + Message message = createMessage(SimpMessageType.SUBSCRIBE, user, "123", sourceDestination); + assertThatIllegalArgumentException().isThrownBy(() -> this.resolver.resolveDestination(message)); + } + @Test public void handleUnsubscribe() { TestPrincipal user = new TestPrincipal("joe");