You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/11/12 17:12:14 UTC
svn commit: r594198 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/framing:
Buffer.cpp Buffer.h
Author: gsim
Date: Mon Nov 12 08:12:13 2007
New Revision: 594198
URL: http://svn.apache.org/viewvc?rev=594198&view=rev
Log:
Minimal bounds checking
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp?rev=594198&r1=594197&r2=594198&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp Mon Nov 12 08:12:13 2007
@@ -164,12 +164,14 @@
void Buffer::getShortString(string& s){
uint8_t len = getOctet();
+ checkAvailable(len);
s.assign(data + position, len);
position += len;
}
void Buffer::getLongString(string& s){
uint32_t len = getLong();
+ checkAvailable(len);
s.assign(data + position, len);
position += len;
}
@@ -181,6 +183,7 @@
}
void Buffer::getRawData(string& s, uint32_t len){
+ checkAvailable(len);
s.assign(data + position, len);
position += len;
}
@@ -191,6 +194,7 @@
}
void Buffer::getRawData(uint8_t* s, size_t len){
+ checkAvailable(len);
memcpy(s, data + position, len);
position += len;
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h?rev=594198&r1=594197&r2=594198&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h Mon Nov 12 08:12:13 2007
@@ -19,6 +19,7 @@
*
*/
#include "amqp_types.h"
+#include "qpid/Exception.h"
#ifndef _Buffer_
#define _Buffer_
@@ -26,6 +27,8 @@
namespace qpid {
namespace framing {
+struct OutOfBounds : qpid::Exception {};
+
class Content;
class FieldTable;
@@ -35,6 +38,8 @@
char* data;
uint32_t position;
uint32_t r_position;
+
+ void checkAvailable(uint32_t count) { if (position + count > size) throw OutOfBounds(); }
public: