]> granicus.if.org Git - icinga2/commitdiff
Fix incorrect header length check in NetString::ReadStringFromStream
authorGunnar Beutner <gunnar@beutner.name>
Mon, 2 Mar 2015 11:46:16 +0000 (12:46 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 2 Mar 2015 11:47:24 +0000 (12:47 +0100)
lib/base/netstring.cpp

index 3692c56daffcf5d1a0df10f9883259d35420ee86..9de181e2622d64569150a99d662952dc3a749f85 100644 (file)
@@ -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)"));