Skip to content

Commit 3028a1e

Browse files
author
MarcoFalke
committed
Merge bitcoin/bitcoin#21581: streams: Accept URef obj for VectorReader unserialize
fa2204f streams: Accept URef obj for VectorReader unserialize (MarcoFalke) Pull request description: Missed in commit 172f5fa. An URef may collapse into an LRef or RRef depending on context. There is no reason to forbid RRef in `VectorReader::operator>>`, so add it for consistency. ACKs for top commit: ryanofsky: Code review ACK fa2204f, just expanded test since last review Tree-SHA512: 09ff4e8a918e15b08cebd8c125d37e78bfb3a635c38546fc8454a97a882b2c81c55ef552243617e78744799d31127e6fbf78c4e319c030480b370aab6f38b645
2 parents 86e0474 + fa2204f commit 3028a1e

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/streams.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class VectorReader
167167
}
168168

169169
template<typename T>
170-
VectorReader& operator>>(T& obj)
170+
VectorReader& operator>>(T&& obj)
171171
{
172172
// Unserialize from this stream
173173
::Unserialize(*this, obj);

src/test/streams_tests.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,17 @@ BOOST_AUTO_TEST_CASE(streams_vector_reader)
112112
BOOST_CHECK_THROW(new_reader >> d, std::ios_base::failure);
113113
}
114114

115+
BOOST_AUTO_TEST_CASE(streams_vector_reader_rvalue)
116+
{
117+
std::vector<uint8_t> data{0x82, 0xa7, 0x31};
118+
VectorReader reader(SER_NETWORK, INIT_PROTO_VERSION, data, /* pos= */ 0);
119+
uint32_t varint = 0;
120+
// Deserialize into r-value
121+
reader >> VARINT(varint);
122+
BOOST_CHECK_EQUAL(varint, 54321);
123+
BOOST_CHECK(reader.empty());
124+
}
125+
115126
BOOST_AUTO_TEST_CASE(bitstream_reader_writer)
116127
{
117128
CDataStream data(SER_NETWORK, INIT_PROTO_VERSION);

0 commit comments

Comments
 (0)