diff --git a/src/parser.cpp b/src/parser.cpp index 1541f88d..f785045f 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -777,7 +778,14 @@ prepare() -> { BOOST_ASSERT( h_.md.payload == payload::to_eof); - n = clamp(body_limit_remain() + 1, n); + // No more messages can be pipelined, so + // limit the output buffer to the remaining + // body limit plus one byte to detect + // exhaustion. + std::uint64_t r = body_limit_remain(); + if(r != std::uint64_t(-1)) + r += 1; + n = clamp(r, n); } nprepare_ = n; @@ -802,7 +810,14 @@ prepare() -> { BOOST_ASSERT( h_.md.payload == payload::to_eof); - n = clamp(body_limit_remain() + 1, n); + // No more messages can be pipelined, so + // limit the output buffer to the remaining + // body limit plus one byte to detect + // exhaustion. + std::uint64_t r = body_limit_remain(); + if(r != std::uint64_t(-1)) + r += 1; + n = clamp(r, n); n = clamp(n, eb_->max_size() - eb_->size()); // fill capacity first to avoid an allocation std::size_t avail = diff --git a/src/serializer.cpp b/src/serializer.cpp index 435a0dfc..31bfabcc 100644 --- a/src/serializer.cpp +++ b/src/serializer.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/test/unit/compression.cpp b/test/unit/compression.cpp index 5245cbb4..2f9f00df 100644 --- a/test/unit/compression.cpp +++ b/test/unit/compression.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include "test_helpers.hpp"