diff --git a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java index a9b913192fa..c5a3051a5ff 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java @@ -1669,6 +1669,9 @@ private RemotingCommand updateAndCreateSubscriptionGroup(ChannelHandlerContext c SubscriptionGroupConfig config = RemotingSerializable.decode(request.getBody(), SubscriptionGroupConfig.class); if (config != null) { + if (!updateSubGroupPreCheck(config, response)) { + return response; + } this.brokerController.getSubscriptionGroupManager().updateSubscriptionGroupConfig(config); } @@ -1692,7 +1695,11 @@ private RemotingCommand updateAndCreateSubscriptionGroupList(ChannelHandlerConte final List groupConfigList = subscriptionGroupList.getGroupConfigList(); final StringBuilder builder = new StringBuilder(); + final RemotingCommand response = RemotingCommand.createResponseCommand(null); for (SubscriptionGroupConfig config : groupConfigList) { + if (!updateSubGroupPreCheck(config, response)) { + return response; + } builder.append(config.getGroupName()).append(";"); } final String groupNames = builder.toString(); @@ -1700,7 +1707,6 @@ private RemotingCommand updateAndCreateSubscriptionGroupList(ChannelHandlerConte groupNames, RemotingHelper.parseChannelRemoteAddr(ctx.channel())); - final RemotingCommand response = RemotingCommand.createResponseCommand(null); try { this.brokerController.getSubscriptionGroupManager().updateSubscriptionGroupConfigList(groupConfigList); response.setCode(ResponseCode.SUCCESS); @@ -1719,6 +1725,15 @@ private RemotingCommand updateAndCreateSubscriptionGroupList(ChannelHandlerConte return response; } + private boolean updateSubGroupPreCheck(SubscriptionGroupConfig config,RemotingCommand resp) { + if (StringUtils.isBlank(config.getGroupName())) { + resp.setCode(ResponseCode.ILLEGAL_ARGUMENT); + resp.setRemark("The subscription group name cannot be empty"); + return false; + } + return true; + } + private void initConsumerOffset(String clientHost, String groupName, int mode, TopicConfig topicConfig) throws ConsumeQueueException { String topic = topicConfig.getTopicName(); diff --git a/broker/src/test/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessorTest.java b/broker/src/test/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessorTest.java index 959b147d9d3..f7f7bbd796f 100644 --- a/broker/src/test/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessorTest.java +++ b/broker/src/test/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessorTest.java @@ -73,6 +73,7 @@ import org.apache.rocketmq.remoting.protocol.body.QueryCorrectionOffsetBody; import org.apache.rocketmq.remoting.protocol.body.UnlockBatchRequestBody; import org.apache.rocketmq.remoting.protocol.body.UserInfo; +import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupList; import org.apache.rocketmq.remoting.protocol.header.CreateAclRequestHeader; import org.apache.rocketmq.remoting.protocol.header.CreateTopicRequestHeader; import org.apache.rocketmq.remoting.protocol.header.CreateUserRequestHeader; @@ -633,6 +634,30 @@ public void testUpdateAndCreateSubscriptionGroup() throws RemotingCommandExcepti assertThat(response.getCode()).isEqualTo(ResponseCode.SUCCESS); } + @Test + public void testEmptyNameWhenUpdateSubGroup() throws RemotingCommandException { + RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.UPDATE_AND_CREATE_SUBSCRIPTIONGROUP, null); + SubscriptionGroupConfig subscriptionGroupConfig = new SubscriptionGroupConfig(); + subscriptionGroupConfig.setGroupName(""); + request.setBody(JSON.toJSON(subscriptionGroupConfig).toString().getBytes()); + RemotingCommand response = adminBrokerProcessor.processRequest(handlerContext, request); + assertThat(response.getCode()).isEqualTo(ResponseCode.ILLEGAL_ARGUMENT); + } + + @Test + public void testEmptyNameWhenUpdateSubGroupList() throws RemotingCommandException { + RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.UPDATE_AND_CREATE_SUBSCRIPTIONGROUP_LIST, null); + SubscriptionGroupList groupList = new SubscriptionGroupList(); + List list = new ArrayList<>(); + SubscriptionGroupConfig subscriptionGroupConfig = new SubscriptionGroupConfig(); + subscriptionGroupConfig.setGroupName(""); + list.add(subscriptionGroupConfig); + groupList.setGroupConfigList(list); + request.setBody(JSON.toJSON(groupList).toString().getBytes()); + RemotingCommand response = adminBrokerProcessor.processRequest(handlerContext, request); + assertThat(response.getCode()).isEqualTo(ResponseCode.ILLEGAL_ARGUMENT); + } + @Test public void testGetAllSubscriptionGroupInRocksdb() throws Exception { initRocksdbSubscriptionManager(); diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/ResponseCode.java b/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/ResponseCode.java index e2ce81d95b9..9d1afc0f98b 100644 --- a/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/ResponseCode.java +++ b/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/ResponseCode.java @@ -96,6 +96,8 @@ public class ResponseCode extends RemotingSysResponseCode { public static final int ILLEGAL_OPERATION = 604; + public static final int ILLEGAL_ARGUMENT = 605; + public static final int RPC_UNKNOWN = -1000; public static final int RPC_ADDR_IS_NULL = -1002; public static final int RPC_SEND_TO_CHANNEL_FAILED = -1004;