Unless loose-encoded length is mean to mean something different from tight-encoded length, I believe that the length written to the wire for loosely-encoded OpenWire messages is off by 4. I imagine this hasn't been caught before because most clients synchronously read packets off the wire and so can ignore the length specification.
— activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (revision 399408)
+++ activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (working copy)
@@ -172,7 +172,7 @@
sequence = baos.toByteSequence();
if( !sizePrefixDisabled ) {
- size = sequence.getLength()-4;
+ size = sequence.getLength();
ByteArrayPacket packet = new ByteArrayPacket(sequence);
PacketData.writeIntBig(packet, size);
}
@@ -253,7 +253,7 @@
if( !sizePrefixDisabled ) {
looseOut.close();
ByteSequence sequence = baos.toByteSequence();
- dataOut.writeInt(sequence.getLength()-4);
+ dataOut.writeInt(sequence.getLength());
dataOut.write(sequence.getData(), sequence.getOffset(), sequence.getLength());
}