Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 98cacd6

Browse files
authored
Merge pull request #1716 from evoskuil/master
Fix: don't consume limit in byte_reader::peek, test.
2 parents 5fbf9e7 + 46d0dcf commit 98cacd6

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

include/bitcoin/system/impl/stream/streamers/byte_reader.ipp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,8 +655,11 @@ byte_allocator& byte_reader<IStream>::get_allocator() const NOEXCEPT
655655
template <typename IStream>
656656
uint8_t byte_reader<IStream>::do_peek_byte() NOEXCEPT
657657
{
658-
if (limiter(one))
658+
if (is_zero(remaining_))
659+
{
660+
invalid();
659661
return pad();
662+
}
660663

661664
// This sets eofbit (or badbit) on empty and eofbit if otherwise at end.
662665
// eofbit does not cause !!eofbit == true, but badbit does, so we validate

test/stream/streamers/byte_reader.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,11 @@ BOOST_AUTO_TEST_CASE(byte_reader__set_limit__set_position_forward_peek__limited)
467467
reader.set_position(3);
468468
BOOST_REQUIRE(!reader.is_exhausted());
469469

470+
// Peek does not consume limit (as verified by subsequent reads).
471+
BOOST_REQUIRE_EQUAL(reader.peek_byte(), 'd');
472+
BOOST_REQUIRE_EQUAL(reader.peek_byte(), 'd');
473+
BOOST_REQUIRE_EQUAL(reader.peek_byte(), 'd');
474+
470475
// Read to limit and verify.
471476
BOOST_REQUIRE_EQUAL(reader.get_read_position(), 3u);
472477
BOOST_REQUIRE_EQUAL(reader.read_byte(), 'd');

0 commit comments

Comments
 (0)