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

tabish pushed a commit to branch 1.x
in repository https://gitbox.apache.org/repos/asf/qpid-jms.git


The following commit(s) were added to refs/heads/1.x by this push:
     new feff0399 QPIDJMS-617: BytesMessage increments the read pointer 
position on MessageFormatException
feff0399 is described below

commit feff039984a460a44f0d67c36b1e0218a21c2cf1
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Tue Jan 6 23:27:56 2026 +0100

    QPIDJMS-617: BytesMessage increments the read pointer position on 
MessageFormatException
    
    Reset the read pointer position in JmsBytesMessage#readUTF() in case of a 
MessageFormatException to allow additional reads of the message data.
    
    (cherry picked from commit 3be921712bf30d40a2eec5d0e7a51e81eeda0197)
---
 .../org/apache/qpid/jms/message/JmsBytesMessage.java    | 11 +++++++++++
 .../apache/qpid/jms/message/JmsBytesMessageTest.java    | 17 +++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
index afb112c9..04239b1c 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
@@ -200,11 +200,22 @@ public class JmsBytesMessage extends JmsMessage 
implements BytesMessage {
     @Override
     public String readUTF() throws JMSException {
         initializeReading();
+        final boolean canReset = this.dataIn.markSupported();
+        if (canReset) {
+            this.dataIn.mark(Integer.MAX_VALUE);
+        }
         try {
             return this.dataIn.readUTF();
         } catch (EOFException e) {
             throw JmsExceptionSupport.createMessageEOFException(e);
         } catch (IOException e) {
+            if (canReset) {
+                try {
+                    this.dataIn.reset();
+                } catch (IOException ignored) {
+                    // if reset fails original failure should be propagated
+                }
+            }
             throw JmsExceptionSupport.createMessageFormatException(e);
         }
     }
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
index a0b7e191..6595b186 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
@@ -438,6 +438,23 @@ public class JmsBytesMessageTest {
         assertTrue(msg.readUTF().equals(str));
     }
 
+    @Test
+    public void testReadUTFMessageFormatExceptionDoesNotAdvanceReadPointer() 
throws Exception {
+        JmsBytesMessage msg = factory.createBytesMessage();
+        msg.writeShort((short) 2);
+        msg.writeByte((byte) 0xC0);
+        msg.writeByte((byte) 0x00);
+        msg.reset();
+
+        assertThrows(MessageFormatException.class, msg::readUTF);
+
+        assertEquals(2, msg.readUnsignedShort());
+        assertEquals((byte) 0xC0, msg.readByte());
+        assertEquals((byte) 0x00, msg.readByte());
+
+        assertThrows(MessageEOFException.class, msg::readByte);
+    }
+
     @Test
     public void testReadBytesbyteArray() throws JMSException {
         JmsBytesMessage msg = factory.createBytesMessage();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to