summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2009-01-23 16:07:39 +0000
committerAlan Conway <aconway@apache.org>2009-01-23 16:07:39 +0000
commitdcd0c68946cd3c74ddac68a09cbf52c88a61fac3 (patch)
treefb3309882343123105a8aa6b60821bf6e98a1108
parent2deb4832b4894bb2a5123daaffd54d6da652fae3 (diff)
downloadqpid-python-dcd0c68946cd3c74ddac68a09cbf52c88a61fac3.tar.gz
Replace assertion with exception.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@737067 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--cpp/src/qpid/framing/FrameDecoder.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/cpp/src/qpid/framing/FrameDecoder.cpp b/cpp/src/qpid/framing/FrameDecoder.cpp
index 07e2f7513d..cbdac181e9 100644
--- a/cpp/src/qpid/framing/FrameDecoder.cpp
+++ b/cpp/src/qpid/framing/FrameDecoder.cpp
@@ -22,13 +22,14 @@
#include "Buffer.h"
#include "qpid/log/Statement.h"
#include <algorithm>
+#include "qpid/framing/reply_exceptions.h"
namespace qpid {
namespace framing {
namespace {
-/** Move up to n bytes from start of buf to end of bytes. */
-void move(std::vector<char>& bytes, Buffer& buffer, size_t n) {
+/** Append up to n bytes from start of buf to end of bytes. */
+void append(std::vector<char>& bytes, Buffer& buffer, size_t n) {
size_t oldSize = bytes.size();
n = std::min(n, size_t(buffer.available()));
bytes.resize(oldSize+n);
@@ -39,21 +40,22 @@ void move(std::vector<char>& bytes, Buffer& buffer, size_t n) {
bool FrameDecoder::decode(Buffer& buffer) {
if (buffer.available() == 0) return false;
- if (fragment.empty()) {
+ if (fragment.empty()) {
if (frame.decode(buffer)) // Decode from buffer
return true;
else // Store fragment
- move(fragment, buffer, buffer.available());
- }
+ append(fragment, buffer, buffer.available());
+ }
else { // Already have a fragment
// Get enough data to decode the frame size.
if (fragment.size() < AMQFrame::DECODE_SIZE_MIN) {
- move(fragment, buffer, AMQFrame::DECODE_SIZE_MIN - fragment.size());
+ append(fragment, buffer, AMQFrame::DECODE_SIZE_MIN - fragment.size());
}
if (fragment.size() >= AMQFrame::DECODE_SIZE_MIN) {
uint16_t size = AMQFrame::decodeSize(&fragment[0]);
- assert(size > fragment.size());
- move(fragment, buffer, size-fragment.size());
+ if (size <= fragment.size())
+ throw FramingErrorException(QPID_MSG("Frame size " << size << " is too small."));
+ append(fragment, buffer, size-fragment.size());
Buffer b(&fragment[0], fragment.size());
if (frame.decode(b)) {
assert(b.available() == 0);