From fcccc5122980fc47063c036d7caa8ddfc83f0cc2 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Sat, 8 Aug 2026 18:04:51 +0800 Subject: [PATCH] [ISSUE #10861] fix(tools): validate controller broker IDs --- .../CleanControllerBrokerMetaSubCommand.java | 6 +-- ...eanControllerBrokerMetaSubCommandTest.java | 42 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 tools/src/test/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommandTest.java diff --git a/tools/src/main/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommand.java b/tools/src/main/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommand.java index 24ed025665a..fd33b6ec328 100644 --- a/tools/src/main/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommand.java +++ b/tools/src/main/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommand.java @@ -26,8 +26,6 @@ import org.apache.rocketmq.tools.command.SubCommand; import org.apache.rocketmq.tools.command.SubCommandException; -import java.util.Arrays; - public class CleanControllerBrokerMetaSubCommand implements SubCommand { @Override @@ -83,7 +81,9 @@ public void execute(CommandLine commandLine, Options options, RPCHook rpcHook) t if (commandLine.hasOption('b')) { brokerControllerIdsToClean = commandLine.getOptionValue('b').trim(); try { - Arrays.stream(brokerControllerIdsToClean.split(";")).map(idStr -> Long.parseLong(idStr)); + for (String brokerControllerId : brokerControllerIdsToClean.split(";")) { + Long.parseLong(brokerControllerId); + } } catch (NumberFormatException numberFormatException) { throw new IllegalArgumentException("please set the option according to the format", numberFormatException); } diff --git a/tools/src/test/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommandTest.java b/tools/src/test/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommandTest.java new file mode 100644 index 00000000000..52799cf11a6 --- /dev/null +++ b/tools/src/test/java/org/apache/rocketmq/tools/command/controller/CleanControllerBrokerMetaSubCommandTest.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.rocketmq.tools.command.controller; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.rocketmq.srvutil.ServerUtil; +import org.junit.Test; + +public class CleanControllerBrokerMetaSubCommandTest { + + @Test(expected = IllegalArgumentException.class) + public void executeRejectsNonNumericBrokerControllerId() throws Exception { + CleanControllerBrokerMetaSubCommand command = new CleanControllerBrokerMetaSubCommand(); + Options options = ServerUtil.buildCommandlineOptions(new Options()); + String[] args = { + "-a", "127.0.0.1:9878", + "-bn", "broker-a", + "-c", "cluster-a", + "-b", "1;not-a-number" + }; + CommandLine commandLine = ServerUtil.parseCmdLine("mqadmin " + command.commandName(), args, + command.buildCommandlineOptions(options), new DefaultParser()); + + command.execute(commandLine, options, null); + } +}