You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2026/01/06 22:28:01 UTC
(qpid-jms) branch main updated: QPIDJMS-617: BytesMessage increments the read pointer position on MessageFormatException
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 <da...@gmail.com>
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org