diff options
author | Alan Conway <aconway@apache.org> | 2009-01-23 16:07:39 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2009-01-23 16:07:39 +0000 |
commit | dcd0c68946cd3c74ddac68a09cbf52c88a61fac3 (patch) | |
tree | fb3309882343123105a8aa6b60821bf6e98a1108 | |
parent | 2deb4832b4894bb2a5123daaffd54d6da652fae3 (diff) | |
download | qpid-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.cpp | 18 |
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); |