activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hiram Chirino (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-718) Incorrect length specification in loose encoding?
Date Mon, 22 May 2006 20:49:51 GMT
    [ https://issues.apache.org/activemq/browse/AMQ-718?page=comments#action_36203 ] 

Hiram Chirino commented on AMQ-718:
-----------------------------------

Hi Adrew.. this stuf is not easy grok.. glad your keeping us honest.

Your right, I stand corrected, the size field holds the size of the type+playload fields.
 For a sec there I was thinking it only held the size of the payload.

I now agree with your anyalisys that the original patch to line 253 is valid.  And also found
that the sizePrefixDisabled option was not being honorred in the tight encoding case for that
method.  This is the new patch what I will be applying shortly.

Index: /Users/chirino/sandbox/activemq-4-branch/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
===================================================================
--- /Users/chirino/sandbox/activemq-4-branch/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
(revision 399345)
+++ /Users/chirino/sandbox/activemq-4-branch/activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java
(working copy)
@@ -233,11 +233,15 @@
 	            BooleanStream bs = new BooleanStream();
 	            size += dsm.tightMarshal1(this, c, bs);
 	            size += bs.marshalledSize(); 
-	
-	            dataOut.writeInt(size);
+
+                if( !sizePrefixDisabled ) {
+                    dataOut.writeInt(size);
+                }
+                
 	            dataOut.writeByte(type);            
 	            bs.marshal(dataOut);
 	            dsm.tightMarshal2(this, c, dataOut, bs);
+                
             } else {            	
             	DataOutputStream looseOut = dataOut;
             	ByteArrayOutputStream baos=null;
@@ -253,7 +257,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());
                 }
 


> Incorrect length specification in loose encoding?
> -------------------------------------------------
>
>          Key: AMQ-718
>          URL: https://issues.apache.org/activemq/browse/AMQ-718
>      Project: ActiveMQ
>         Type: Bug

>   Components: Transport
>     Versions: 4.0, 4.0 RC2, 4.0 RC3
>     Reporter: Andrew Lusk
>     Assignee: Hiram Chirino
>      Fix For: 4.1

>
>
> 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());
>                  }
>  

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message