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()) {