This is an automated email from the ASF dual-hosted git repository.
tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-jms.git
The following commit(s) were added to refs/heads/main by this push:
new 3be92171 QPIDJMS-617: BytesMessage increments the read pointer
position on MessageFormatException
3be92171 is described below
commit 3be921712bf30d40a2eec5d0e7a51e81eeda0197
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.
---
.../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 dba4b043..bd37f734 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 e98fdfa5..cef8d368 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]