Author: aconway Date: Fri Jan 23 08:07:39 2009 New Revision: 737067 URL: http://svn.apache.org/viewvc?rev=737067&view=rev Log: Replace assertion with exception.
Modified: qpid/trunk/qpid/cpp/src/qpid/framing/FrameDecoder.cpp Modified: qpid/trunk/qpid/cpp/src/qpid/framing/FrameDecoder.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/framing/FrameDecoder.cpp?rev=737067&r1=737066&r2=737067&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/framing/FrameDecoder.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/framing/FrameDecoder.cpp Fri Jan 23 08:07:39 2009 @@ -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 @@ 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); --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org