You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2011/02/01 18:02:00 UTC

svn commit: r1066097 - /qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp

Author: kgiusti
Date: Tue Feb  1 17:01:59 2011
New Revision: 1066097

URL: http://svn.apache.org/viewvc?rev=1066097&view=rev
Log:
QPID-3030: prevent buffer overflow when writing sequences of bytes.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp?rev=1066097&r1=1066096&r2=1066097&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp Tue Feb  1 17:01:59 2011
@@ -246,6 +246,7 @@ void Buffer::putShortString(const string
     size_t slen = s.length();
     if (slen <= std::numeric_limits<uint8_t>::max()) {
         uint8_t len = (uint8_t) slen;
+        checkAvailable(slen + 1);
         putOctet(len);
         s.copy(data + position, len);
         position += len;
@@ -258,6 +259,7 @@ void Buffer::putMediumString(const strin
     size_t slen = s.length();
     if (slen <= std::numeric_limits<uint16_t>::max()) {
         uint16_t len = (uint16_t) slen;
+        checkAvailable(slen + 2);
         putShort(len);
         s.copy(data + position, len);
         position += len;
@@ -268,6 +270,7 @@ void Buffer::putMediumString(const strin
 
 void Buffer::putLongString(const string& s){
     uint32_t len = s.length();
+    checkAvailable(len + 4);
     putLong(len);
     s.copy(data + position, len);
     position += len;    
@@ -301,6 +304,7 @@ void Buffer::getBin128(uint8_t* b){
 
 void Buffer::putRawData(const string& s){
     uint32_t len = s.length();
+    checkAvailable(len);
     s.copy(data + position, len);
     position += len;    
 }
@@ -312,6 +316,7 @@ void Buffer::getRawData(string& s, uint3
 }
 
 void Buffer::putRawData(const uint8_t* s, size_t len){
+    checkAvailable(len);
     memcpy(data + position, s, len);
     position += len;    
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org