diff options
| author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2011-04-29 20:06:47 +0000 |
|---|---|---|
| committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2011-04-29 20:06:47 +0000 |
| commit | f40511922697d65a91b83896341d351c5dbf909b (patch) | |
| tree | 8a895c2513dfb7697812179d495e53c402189923 /qpid/cpp | |
| parent | 5428f3e2b52b11cbf905e267a949ccca40f9f672 (diff) | |
| download | qpid-python-f40511922697d65a91b83896341d351c5dbf909b.tar.gz | |
QPID-3227: assert if application or reserved header overflows send buffer.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1097934 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp | 12 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp b/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp index af58b7deb0..78bcdec68e 100644 --- a/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp +++ b/qpid/cpp/src/qpid/sys/rdma/RdmaIO.cpp @@ -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; } } diff --git a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h index 3737664bde..8e3429027b 100644 --- a/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h +++ b/qpid/cpp/src/qpid/sys/rdma/rdma_wrap.h @@ -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; } |
