diff --git a/common/src/main/java/org/apache/rocketmq/common/attribute/AttributeParser.java b/common/src/main/java/org/apache/rocketmq/common/attribute/AttributeParser.java index da98c6dab85..2c01288aa84 100644 --- a/common/src/main/java/org/apache/rocketmq/common/attribute/AttributeParser.java +++ b/common/src/main/java/org/apache/rocketmq/common/attribute/AttributeParser.java @@ -44,7 +44,7 @@ public static Map parseToMap(String attributesModification) { String key; String value; if (kv.contains(ATTR_KEY_VALUE_EQUAL_SIGN)) { - String[] splits = kv.split(ATTR_KEY_VALUE_EQUAL_SIGN); + String[] splits = kv.split(ATTR_KEY_VALUE_EQUAL_SIGN, 2); key = splits[0]; value = splits[1]; if (!key.contains(ATTR_ADD_PLUS_SIGN)) { diff --git a/common/src/test/java/org/apache/rocketmq/common/attribute/AttributeParserTest.java b/common/src/test/java/org/apache/rocketmq/common/attribute/AttributeParserTest.java index a89587354b9..63d180b9cfb 100644 --- a/common/src/test/java/org/apache/rocketmq/common/attribute/AttributeParserTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/attribute/AttributeParserTest.java @@ -121,6 +121,13 @@ public void testParseToString() { Assert.assertEquals(addSize + deleteSize, AttributeParser.parseToString(map).split(",").length); } + @Test + public void parseToMap_ValueContainingEqualsSign_PreservesFullValue() { + String attributesModification = "+key=val=ue"; + Map result = AttributeParser.parseToMap(attributesModification); + assertEquals("val=ue", result.get("+key")); + } + @Test public void testParseBetweenStringAndMapWithoutDistortion() { List testCases = Arrays.asList("-a", "+a=b,+c=d,+z=z,+e=e", "+a=b,-d", "+a=b", "-a,-b");