fix: Make TxidFromString() respect string_view length
Problem
Prior to this, TxidFromString()
was passing string_view::data()
into uint256S()
which meant it would only receive the a naked char*
pointer and potentially scan past the string_view::length()
until it found a null terminator (or some other non-hex character).
Appears to have been a fully dormant bug as callers were either passing a string literal or std::string
directly to TxidFromFromString()
, meaning a null terminator always existed at pointer[length()]
. Bug existed since original merge of TxidFromString()
.
Solution
Make uint256S()
(and base_blob::SetHex()
) take and operate on std::string_view
instead of const char*
and have TxidFromString()
pass that in.
(PR was prompted by comment in https://github.com/bitcoin/bitcoin/pull/30377#issuecomment-2208857200 (referring to https://github.com/bitcoin/bitcoin/pull/28922#discussion_r1404437378)).