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]