Author: rgodfrey
Date: Mon Nov 19 17:46:28 2012
New Revision: 1411328

URL: http://svn.apache.org/viewvc?rev=1411328&view=rev
Log:
PROTON-145 : [proton-j] buffer overflow protection

Modified:
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java

Modified: 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1411328&r1=1411327&r2=1411328&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 Mon Nov 19 17:46:28 2012
@@ -181,7 +181,7 @@ public class TransportImpl extends Endpo
             _overflowBuffer.get(bytes, offset, overflowWritten);
             written+=overflowWritten;
         }
-        else if(!_overflowBuffer.hasRemaining())
+        if(!_overflowBuffer.hasRemaining())
         {
             _overflowBuffer.clear();
 
@@ -190,18 +190,20 @@ public class TransportImpl extends Endpo
                        new 
WritableBuffer.ByteBufferWrapper(ByteBuffer.wrap(bytes, offset + written, size 
- written)),
                        new WritableBuffer.ByteBufferWrapper(_overflowBuffer));
 
-            written += processHeader(outputBuffer);
-            written += processOpen(outputBuffer);
-            written += processBegin(outputBuffer);
-            written += processAttach(outputBuffer);
-            written += processReceiverDisposition(outputBuffer);
-            written += processReceiverFlow(outputBuffer);
-            written += processMessageData(outputBuffer);
-            written += processSenderDisposition(outputBuffer);
-            written += processSenderFlow(outputBuffer);
-            written += processDetach(outputBuffer);
-            written += processEnd(outputBuffer);
-            written += processClose(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processHeader(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processOpen(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processBegin(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processAttach(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processReceiverDisposition(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processReceiverFlow(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processMessageData(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processSenderDisposition(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processSenderFlow(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processDetach(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processEnd(outputBuffer);
+            if( outputBuffer.remaining() >= _maxFrameSize ) { written += 
processClose(outputBuffer);
+            }}}}}}}}}}}}
+
             _overflowBuffer.flip();
             written -= _overflowBuffer.remaining();
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to