Skip to content

Commit 88bbcdc

Browse files
author
MarcoFalke
committed
Merge #14357: streams: Fix broken streams_vector_reader test. Remove unused seek(size_t).
4f4993f Remove UBSan suppression (practicalswift) 958e1a3 streams: Remove unused seek(size_t) (practicalswift) Pull request description: Fix broken `streams_vector_reader` test. Remove unused `seek(size_t)`. Before this change the test `streams_vector_reader` triggered an unintended unsigned integer wraparound. It tried so seek using a negative value in `reader.seek(-6)`. Changes in this PR: * Fix broken `VectorReader::seek(size_t)` test case * Remove unused `seek(size_t)` Tree-SHA512: 6c6affd680626363eef9e496748f2f86a522325abab9d6b13161f41125cdc29ceb36c2c1509c90b8ff108d606df7629e55e094cc2b6253b05a892b81ce176b71
2 parents fe5a70b + 4f4993f commit 88bbcdc

File tree

3 files changed

+9
-22
lines changed

3 files changed

+9
-22
lines changed

src/streams.h

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,6 @@ class CVectorWriter
120120
{
121121
return nType;
122122
}
123-
void seek(size_t nSize)
124-
{
125-
nPos += nSize;
126-
if(nPos > vchData.size())
127-
vchData.resize(nPos);
128-
}
129123
private:
130124
const int nType;
131125
const int nVersion;
@@ -152,9 +146,11 @@ class VectorReader
152146
* @param[in] pos Starting position. Vector index where reads should start.
153147
*/
154148
VectorReader(int type, int version, const std::vector<unsigned char>& data, size_t pos)
155-
: m_type(type), m_version(version), m_data(data)
149+
: m_type(type), m_version(version), m_data(data), m_pos(pos)
156150
{
157-
seek(pos);
151+
if (m_pos > m_data.size()) {
152+
throw std::ios_base::failure("VectorReader(...): end of data (m_pos > m_data.size())");
153+
}
158154
}
159155

160156
/*
@@ -197,14 +193,6 @@ class VectorReader
197193
memcpy(dst, m_data.data() + m_pos, n);
198194
m_pos = pos_next;
199195
}
200-
201-
void seek(size_t n)
202-
{
203-
m_pos += n;
204-
if (m_pos > m_data.size()) {
205-
throw std::ios_base::failure("VectorReader::seek(): end of data");
206-
}
207-
}
208196
};
209197

210198
/** Double ended buffer combining vector and stream-like interfaces.

src/test/streams_tests.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ BOOST_AUTO_TEST_CASE(streams_vector_reader)
102102
BOOST_CHECK_THROW(reader >> d, std::ios_base::failure);
103103

104104
// Read a 4 bytes as a signed int from the beginning of the buffer.
105-
reader.seek(-6);
106-
reader >> d;
105+
VectorReader new_reader(SER_NETWORK, INIT_PROTO_VERSION, vch, 0);
106+
new_reader >> d;
107107
BOOST_CHECK_EQUAL(d, 67370753); // 1,255,3,4 in little-endian base-256
108-
BOOST_CHECK_EQUAL(reader.size(), 2);
109-
BOOST_CHECK(!reader.empty());
108+
BOOST_CHECK_EQUAL(new_reader.size(), 2);
109+
BOOST_CHECK(!new_reader.empty());
110110

111111
// Reading after end of byte vector throws an error even if the reader is
112112
// not totally empty.
113-
BOOST_CHECK_THROW(reader >> d, std::ios_base::failure);
113+
BOOST_CHECK_THROW(new_reader >> d, std::ios_base::failure);
114114
}
115115

116116
BOOST_AUTO_TEST_CASE(bitstream_reader_writer)

test/sanitizer_suppressions/ubsan

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ unsigned-integer-overflow:policy/fees.cpp
2929
unsigned-integer-overflow:prevector.h
3030
unsigned-integer-overflow:script/interpreter.cpp
3131
unsigned-integer-overflow:stl_bvector.h
32-
unsigned-integer-overflow:streams.h
3332
unsigned-integer-overflow:txmempool.cpp
3433
unsigned-integer-overflow:util/strencodings.cpp
3534
unsigned-integer-overflow:validation.cpp

0 commit comments

Comments
 (0)