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

clebertsuconic pushed a commit to branch 2.19.x
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git

commit fd2c76db65c538602958cb3cba6dc9a7610e6f48
Author: Justin Bertram <[email protected]>
AuthorDate: Fri Oct 29 11:01:05 2021 -0500

    ARTEMIS-3535 bytes messages not obeying management limit
    
    (cherry picked from commit fb2270dc057c773f99e679132fd8ce926ff2fc58)
---
 .../artemis/core/message/impl/CoreMessage.java     |  8 ++++-
 .../integration/management/QueueControlTest.java   | 42 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
index 5463109..aa3fe34 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
@@ -1372,7 +1372,13 @@ public class CoreMessage extends RefCountMessage 
implements ICoreMessage {
          rc.put(CompositeDataConstants.TYPE, m.getType());
          if (!m.isLargeMessage()) {
             ActiveMQBuffer bodyCopy = m.getReadOnlyBodyBuffer();
-            byte[] bytes = new byte[bodyCopy.readableBytes() <= valueSizeLimit 
? bodyCopy.readableBytes() : valueSizeLimit + 1];
+            int arraySize;
+            if (valueSizeLimit == -1 || bodyCopy.readableBytes() <= 
valueSizeLimit) {
+               arraySize = bodyCopy.readableBytes();
+            } else {
+               arraySize = valueSizeLimit;
+            }
+            byte[] bytes = new byte[arraySize];
             bodyCopy.readBytes(bytes);
             rc.put(CompositeDataConstants.BODY, JsonUtil.truncate(bytes, 
valueSizeLimit));
          } else {
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
index 4b2a58f..fa905ff 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
@@ -578,6 +578,48 @@ public class QueueControlTest extends ManagementTestBase {
    }
 
    @Test
+   public void testBytesMessageBodyWithoutLimits() throws Exception {
+      final int BYTE_COUNT = 2048;
+      SimpleString address = RandomUtil.randomSimpleString();
+      SimpleString queue = RandomUtil.randomSimpleString();
+
+      AddressSettings addressSettings = new 
AddressSettings().setManagementMessageAttributeSizeLimit(-1);
+      server.getAddressSettingsRepository().addMatch(address.toString(), 
addressSettings);
+
+      session.createQueue(new 
QueueConfiguration(queue).setAddress(address).setDurable(durable));
+
+      byte[] randomBytes = RandomUtil.randomBytes(BYTE_COUNT);
+
+      ClientMessage clientMessage = session.createMessage(false);
+      clientMessage.getBodyBuffer().writeBytes(randomBytes);
+
+      QueueControl queueControl = createManagementControl(address, queue);
+      Assert.assertEquals(0, getMessageCount(queueControl));
+
+      ClientProducer producer = session.createProducer(address);
+      producer.send(clientMessage);
+
+      Wait.assertEquals(1, () -> getMessageCount(queueControl));
+
+      CompositeData[] browseResult = queueControl.browse(1, 1);
+      boolean tested = false;
+      for (CompositeData compositeData : browseResult) {
+         for (String key : compositeData.getCompositeType().keySet()) {
+            Object value = compositeData.get(key);
+            if (value != null) {
+               if (value instanceof byte[]) {
+                  assertEqualsByteArrays(randomBytes, (byte[]) value);
+                  tested = true;
+               }
+            }
+         }
+      }
+
+      assertTrue("Nothing tested!", tested);
+      session.deleteQueue(queue);
+   }
+
+   @Test
    public void testTextMessageAttributeLimits() throws Exception {
       SimpleString address = RandomUtil.randomSimpleString();
       SimpleString queue = RandomUtil.randomSimpleString();

Reply via email to