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 b4ff736e2e7..d9aaf9408af 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 @@ -633,6 +633,13 @@ private synchronized RemotingCommand updateAndCreateTopicList(ChannelHandlerCont RemotingCommand request) throws RemotingCommandException { long startTime = System.currentTimeMillis(); + + final RemotingCommand response = RemotingCommand.createResponseCommand(null); + if (request.getBody() == null) { + response.setCode(ResponseCode.SYSTEM_ERROR); + response.setRemark("requestBody must not be null"); + return response; + } final CreateTopicListRequestBody requestBody = CreateTopicListRequestBody.decode(request.getBody(), CreateTopicListRequestBody.class); List topicConfigList = requestBody.getTopicConfigList(); @@ -643,8 +650,6 @@ private synchronized RemotingCommand updateAndCreateTopicList(ChannelHandlerCont String topicNames = builder.toString(); LOGGER.info("AdminBrokerProcessor#updateAndCreateTopicList: topicNames: {}, called by {}", topicNames, RemotingHelper.parseChannelRemoteAddr(ctx.channel())); - final RemotingCommand response = RemotingCommand.createResponseCommand(null); - long executionTime; try { 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 656c783e1f4..f43b787873d 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 @@ -324,6 +324,16 @@ public void testProcessRequest_success() throws RemotingCommandException, Unknow assertThat(response.getCode()).isEqualTo(ResponseCode.SUCCESS); } + @Test + public void testProcessRequestBodyNull() throws Throwable { + BrokerConfig brokerConfig = new BrokerConfig(); + ResumeCheckHalfMessageRequestHeader header = createResumeCheckHalfMessageRequestHeader(); + RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.UPDATE_AND_CREATE_TOPIC_LIST, header); + request.makeCustomHeaderToNet(); + RemotingCommand response = adminBrokerProcessor.processRequest(handlerContext, request); + assertThat(response.getCode()).isEqualTo(ResponseCode.SYSTEM_ERROR); + } + @Test public void testProcessRequest_fail() throws RemotingCommandException, UnknownHostException { RemotingCommand request = createResumeCheckHalfMessageCommand();