From a0a8fae871094487870e6178eb20e0d1cdc7f731 Mon Sep 17 00:00:00 2001 From: dakirily Date: Mon, 29 Dec 2025 18:29:05 +0100 Subject: [PATCH 1/2] QPIDJMS-617: BytesMessage increments the read pointer position on MessageFormatException --- .../qpid/jms/message/JmsBytesMessage.java | 12 ++++++++++++ .../qpid/jms/message/JmsBytesMessageTest.java | 17 +++++++++++++++++ 2 files changed, 29 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 dba4b043c..b58b48b89 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,23 @@ public double readDouble() throws JMSException { @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 e98fdfa55..cef8d3684 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 void testReadUTF() throws JMSException { 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(); From 88417df779311e2daafd60557c139b1b4b82a41e Mon Sep 17 00:00:00 2001 From: dakirily Date: Tue, 6 Jan 2026 19:25:52 +0100 Subject: [PATCH 2/2] QPIDJMS-617: BytesMessage increments the read pointer position on MessageFormatException (fixed formatting) --- .../main/java/org/apache/qpid/jms/message/JmsBytesMessage.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 b58b48b89..bd37f734a 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 @@ -212,8 +212,7 @@ public String readUTF() throws JMSException { if (canReset) { try { this.dataIn.reset(); - } catch (IOException ignored) - { + } catch (IOException ignored) { // if reset fails original failure should be propagated } }