Author: kgiusti
Date: Fri Apr 29 20:06:47 2011
New Revision: 1097934

URL: http://svn.apache.org/viewvc?rev=1097934&view=rev
Log:
QPID-3227: assert if application or reserved header overflows send buffer.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp?rev=1097934&r1=1097933&r2=1097934&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp Fri Apr 29 20:06:47 2011
@@ -140,7 +140,7 @@ namespace Rdma {
         // Prepost recv buffers before we go any further
         qp->allocateRecvBuffers(recvBufferCount, bufferSize+FrameHeaderSize);
 
-        // Create xmit buffers
+        // Create xmit buffers, reserve space for frame header.
         qp->createSendBuffers(xmitBufferCount, bufferSize, FrameHeaderSize);
     }
 
@@ -210,12 +210,14 @@ namespace Rdma {
             }
             break;
         case 1:
-            Buffer* ob = buff ? buff : getSendBuffer();
+            if (!buff)
+                buff = getSendBuffer();
             // Add FrameHeader after frame data
             FrameHeader header(credit);
-            ::memcpy(ob->bytes()+ob->dataCount(), &header, FrameHeaderSize);
-            ob->dataCount(ob->dataCount()+FrameHeaderSize);
-            qp->postSend(ob);
+            assert(buff->dataCount() <= buff->byteCount());   // ensure app 
data doesn't impinge on reserved space.
+            ::memcpy(buff->bytes()+buff->dataCount(), &header, 
FrameHeaderSize);
+            buff->dataCount(buff->dataCount()+FrameHeaderSize);
+            qp->postSend(buff);
             break;
         }
     }

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h?rev=1097934&r1=1097933&r2=1097934&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h Fri Apr 29 20:06:47 2011
@@ -77,6 +77,8 @@ namespace Rdma {
     }
 
     inline void Buffer::dataCount(int32_t s) {
+        // catch any attempt to overflow a buffer
+        assert(s <= bufferSize + reserved);
         sge.length = s;
     }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to