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 | 773959579b14f88d2265038397e888f65149af1a (patch) | |
| tree | a636de01435100b765f1876895acd14aa6955705 /qpid/cpp/src | |
| parent | 7863ff6b35b29796185108ef263f13294756cf29 (diff) | |
| download | qpid-python-773959579b14f88d2265038397e888f65149af1a.tar.gz | |
Replace assertion with exception.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@737067 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/framing/FrameDecoder.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/qpid/cpp/src/qpid/framing/FrameDecoder.cpp b/qpid/cpp/src/qpid/framing/FrameDecoder.cpp index 07e2f7513d..cbdac181e9 100644 --- a/qpid/cpp/src/qpid/framing/FrameDecoder.cpp +++ b/qpid/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); |
