This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new 5f747f5c2 [ISSUE #6747] Add INNER_MULTI_DISPATCH check, can not
contains path separator
5f747f5c2 is described below
commit 5f747f5c24efa66f8eedef99ce865c5ae436ed0b
Author: Humkum <[email protected]>
AuthorDate: Tue May 16 08:26:17 2023 +0800
[ISSUE #6747] Add INNER_MULTI_DISPATCH check, can not contains path
separator
---
client/src/main/java/org/apache/rocketmq/client/Validators.java | 9 +++++++++
store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java | 3 +++
2 files changed, 12 insertions(+)
diff --git a/client/src/main/java/org/apache/rocketmq/client/Validators.java
b/client/src/main/java/org/apache/rocketmq/client/Validators.java
index df885c060..77e4bbd23 100644
--- a/client/src/main/java/org/apache/rocketmq/client/Validators.java
+++ b/client/src/main/java/org/apache/rocketmq/client/Validators.java
@@ -17,13 +17,16 @@
package org.apache.rocketmq.client;
+import java.io.File;
import java.util.Properties;
+import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.TopicConfig;
import org.apache.rocketmq.common.UtilAll;
import org.apache.rocketmq.common.constant.PermName;
import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.message.MessageConst;
import org.apache.rocketmq.common.topic.TopicValidator;
import org.apache.rocketmq.remoting.protocol.ResponseCode;
@@ -77,6 +80,12 @@ public class Validators {
throw new MQClientException(ResponseCode.MESSAGE_ILLEGAL,
"the message body size over max value, MAX: " +
defaultMQProducer.getMaxMessageSize());
}
+
+ String lmqPath =
msg.getUserProperty(MessageConst.PROPERTY_INNER_MULTI_DISPATCH);
+ if (StringUtils.contains(lmqPath, File.separator)) {
+ throw new MQClientException(ResponseCode.MESSAGE_ILLEGAL,
+ "INNER_MULTI_DISPATCH " + lmqPath + " can not contains " +
File.separator + " character");
+ }
}
public static void checkTopic(String topic) throws MQClientException {
diff --git a/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
b/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
index 78d083e2c..695f0e69f 100644
--- a/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
+++ b/store/src/main/java/org/apache/rocketmq/store/ConsumeQueue.java
@@ -749,6 +749,9 @@ public class ConsumeQueue implements ConsumeQueueInterface,
FileQueueLifeCycle {
}
for (int i = 0; i < queues.length; i++) {
String queueName = queues[i];
+ if (StringUtils.contains(queueName, File.separator)) {
+ continue;
+ }
long queueOffset = Long.parseLong(queueOffsets[i]);
int queueId = request.getQueueId();
if (this.messageStore.getMessageStoreConfig().isEnableLmq() &&
MixAll.isLmq(queueName)) {