This is an automated email from the ASF dual-hosted git repository.
lizhanhui 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 c11ed78ee [ISSUE #4955] validate userProperties contain control
character or not (#4956)
c11ed78ee is described below
commit c11ed78eeb73c23da4cf9a36a6bad493a1279210
Author: lk <[email protected]>
AuthorDate: Thu Sep 1 09:41:28 2022 +0800
[ISSUE #4955] validate userProperties contain control character or not
(#4956)
---
.../grpc/v2/producer/SendMessageActivity.java | 6 +++
.../grpc/v2/producer/SendMessageActivityTest.java | 58 ++++++++++++++++++++++
2 files changed, 64 insertions(+)
diff --git
a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java
b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java
index e2d99f51a..6146c80cd 100644
---
a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java
+++
b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java
@@ -204,6 +204,12 @@ public class SendMessageActivity extends
AbstractMessingActivity {
if
(MessageConst.STRING_HASH_SET.contains(userPropertiesEntry.getKey())) {
throw new
GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "property is used by
system: " + userPropertiesEntry.getKey());
}
+ if
(GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getKey()))
{
+ throw new
GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "the key of property
cannot contain control character");
+ }
+ if
(GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getValue()))
{
+ throw new
GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "the value of property
cannot contain control character");
+ }
userPropertySize +=
userPropertiesEntry.getKey().getBytes(StandardCharsets.UTF_8).length;
userPropertySize +=
userPropertiesEntry.getValue().getBytes(StandardCharsets.UTF_8).length;
}
diff --git
a/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivityTest.java
b/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivityTest.java
index 117156b65..f6320454a 100644
---
a/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivityTest.java
+++
b/proxy/src/test/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivityTest.java
@@ -696,6 +696,64 @@ public class SendMessageActivityTest extends
BaseActivityTest {
}
});
+ // set the key of user property with control character
+ assertThrows(GrpcProxyException.class, () -> {
+ try {
+ this.sendMessageActivity.sendMessage(
+ createContext(),
+ SendMessageRequest.newBuilder()
+ .addMessages(Message.newBuilder()
+ .setTopic(Resource.newBuilder()
+ .setName(TOPIC)
+ .build())
+ .setSystemProperties(SystemProperties.newBuilder()
+ .setMessageId("msgId")
+ .setQueueId(0)
+ .setMessageType(MessageType.NORMAL)
+
.setBornTimestamp(Timestamps.fromMillis(System.currentTimeMillis()))
+
.setBornHost(StringUtils.defaultString(RemotingUtil.getLocalAddress(),
"127.0.0.1:1234"))
+ .build())
+ .putUserProperties("\u0000", "hello")
+ .setBody(ByteString.copyFrom(new byte[3]))
+ .build())
+ .build()
+ ).get();
+ } catch (ExecutionException t) {
+ GrpcProxyException e = (GrpcProxyException) t.getCause();
+ assertEquals(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, e.getCode());
+ throw e;
+ }
+ });
+
+ // set the value of user property with control character
+ assertThrows(GrpcProxyException.class, () -> {
+ try {
+ this.sendMessageActivity.sendMessage(
+ createContext(),
+ SendMessageRequest.newBuilder()
+ .addMessages(Message.newBuilder()
+ .setTopic(Resource.newBuilder()
+ .setName(TOPIC)
+ .build())
+ .setSystemProperties(SystemProperties.newBuilder()
+ .setMessageId("msgId")
+ .setQueueId(0)
+ .setMessageType(MessageType.NORMAL)
+
.setBornTimestamp(Timestamps.fromMillis(System.currentTimeMillis()))
+
.setBornHost(StringUtils.defaultString(RemotingUtil.getLocalAddress(),
"127.0.0.1:1234"))
+ .build())
+ .putUserProperties("p", "\u0000")
+ .setBody(ByteString.copyFrom(new byte[3]))
+ .build())
+ .build()
+ ).get();
+ } catch (ExecutionException t) {
+ GrpcProxyException e = (GrpcProxyException) t.getCause();
+ assertEquals(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, e.getCode());
+ throw e;
+ }
+ });
+
// empty message id
assertThrows(GrpcProxyException.class, () -> {
try {