From 79a69d3e898132526f16bef4898592d7a81d8d22 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 2 Mar 2015 12:46:16 +0100 Subject: [PATCH] Fix incorrect header length check in NetString::ReadStringFromStream --- lib/base/netstring.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/base/netstring.cpp b/lib/base/netstring.cpp index 3692c56da..9de181e26 100644 --- a/lib/base/netstring.cpp +++ b/lib/base/netstring.cpp @@ -51,6 +51,11 @@ StreamReadStatus NetString::ReadStringFromStream(const Stream::Ptr& stream, Stri for (size_t i = 0; i < context.Size; i++) { if (context.Buffer[i] == ':') { header_length = i; + + /* make sure there's a header */ + if (header_length == 0) + BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid NetString (no length specifier)")); + break; } else if (i > 16) BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid NetString (missing :)")); @@ -61,10 +66,6 @@ StreamReadStatus NetString::ReadStringFromStream(const Stream::Ptr& stream, Stri return StatusNeedData; } - /* make sure there's a header */ - if (header_length == 0) - BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid NetString (no length specifier)")); - /* no leading zeros allowed */ if (context.Buffer[0] == '0' && isdigit(context.Buffer[1])) BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid NetString (leading zero)"));