This is an automated email from the ASF dual-hosted git repository.

duhengforever 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 f219170  [ISSUE #3786] fix: The length of properties value should be 
checked before converting them to short. (#3788)
f219170 is described below

commit f21917085166237d5cf9331aad82c1a8c6f0f46c
Author: 彭小漪 <[email protected]>
AuthorDate: Thu Feb 3 17:54:46 2022 +0800

    [ISSUE #3786] fix: The length of properties value should be checked before 
converting them to short. (#3788)
---
 .../java/org/apache/rocketmq/common/message/MessageDecoder.java    | 5 ++++-
 store/src/main/java/org/apache/rocketmq/store/CommitLog.java       | 7 ++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java 
b/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java
index c94700e..9299127 100644
--- 
a/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java
+++ 
b/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java
@@ -478,7 +478,10 @@ public class MessageDecoder {
         String properties = messageProperties2String(message.getProperties());
         byte[] propertiesBytes = properties.getBytes(CHARSET_UTF8);
         //note properties length must not more than Short.MAX
-        short propertiesLength = (short) propertiesBytes.length;
+        int propsLen = propertiesBytes.length;
+        if (propsLen > Short.MAX_VALUE)
+            throw new RuntimeException(String.format("Properties size of 
message exceeded, properties size: {}, maxSize: {}.", propsLen, 
Short.MAX_VALUE));
+        short propertiesLength = (short) propsLen;
         int sysFlag = message.getFlag();
         int storeSize = 4 // 1 TOTALSIZE
             + 4 // 2 MAGICCOD
diff --git a/store/src/main/java/org/apache/rocketmq/store/CommitLog.java 
b/store/src/main/java/org/apache/rocketmq/store/CommitLog.java
index 73fd361..c10ffc3 100644
--- a/store/src/main/java/org/apache/rocketmq/store/CommitLog.java
+++ b/store/src/main/java/org/apache/rocketmq/store/CommitLog.java
@@ -1606,7 +1606,12 @@ public class CommitLog {
             // properties from MessageExtBatch
             String batchPropStr = 
MessageDecoder.messageProperties2String(messageExtBatch.getProperties());
             final byte[] batchPropData = 
batchPropStr.getBytes(MessageDecoder.CHARSET_UTF8);
-            final short batchPropLen = (short) batchPropData.length;
+            int batchPropDataLen = batchPropData.length;
+            if (batchPropDataLen > Short.MAX_VALUE) {
+                CommitLog.log.warn("Properties size of messageExtBatch 
exceeded, properties size: {}, maxSize: {}.", batchPropDataLen, 
Short.MAX_VALUE);
+                throw new RuntimeException("Properties size of messageExtBatch 
exceeded!");
+            }
+            final short batchPropLen = (short) batchPropDataLen;
 
             int batchSize = 0;
             while (messagesByteBuff.hasRemaining()) {

Reply via email to