diff --git a/CHANGELOG.md b/CHANGELOG.md index c1714761..9435c41a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Version 173: * Remove Autobahn testsuite doc note * Fix buffers_adapter iterator value type * Fix buffers_adapter max_size +* Fix buffers_prefix iterator decrement -------------------------------------------------------------------------------- diff --git a/include/boost/beast/core/buffers_prefix.hpp b/include/boost/beast/core/buffers_prefix.hpp index 858723fe..175610f1 100644 --- a/include/boost/beast/core/buffers_prefix.hpp +++ b/include/boost/beast/core/buffers_prefix.hpp @@ -39,6 +39,7 @@ class buffers_prefix_view BufferSequence bs_; std::size_t size_; + std::size_t remain_; iter_type end_; template @@ -46,6 +47,7 @@ class buffers_prefix_view Deduced&& other, std::size_t dist) : bs_(std::forward(other).bs_) , size_(other.size_) + , remain_(other.remain_) , end_(std::next(bs_.begin(), dist)) { } diff --git a/include/boost/beast/core/impl/buffers_prefix.ipp b/include/boost/beast/core/impl/buffers_prefix.ipp index a4548385..783cf19c 100644 --- a/include/boost/beast/core/impl/buffers_prefix.ipp +++ b/include/boost/beast/core/impl/buffers_prefix.ipp @@ -125,7 +125,7 @@ private: const_iterator(buffers_prefix_view const& b, std::true_type) : b_(&b) - , remain_(0) + , remain_(b.remain_) , it_(b_->end_) { } @@ -145,6 +145,7 @@ buffers_prefix_view:: setup(std::size_t size) { size_ = 0; + remain_ = 0; end_ = boost::asio::buffer_sequence_begin(bs_); auto const last = bs_.end(); while(end_ != last) @@ -154,6 +155,7 @@ setup(std::size_t size) if(len >= size) { size_ += size; + remain_ = size - len; break; } size -= len; @@ -192,6 +194,7 @@ operator=(buffers_prefix_view&& other) -> other.end_); bs_ = std::move(other.bs_); size_ = other.size_; + remain_ = other.remain_; end_ = std::next( boost::asio::buffer_sequence_begin(bs_), dist); @@ -209,6 +212,7 @@ operator=(buffers_prefix_view const& other) -> other.end_); bs_ = other.bs_; size_ = other.size_; + remain_ = other.remain_; end_ = std::next( boost::asio::buffer_sequence_begin(bs_), dist);