Merge bitcoin/bitcoin#25001: Modernize util/strencodings and util/string: string_view and optional
fa7078d84fscripted-diff: Rename ValidAsCString to ContainsNoNUL (MacroFake)e7d2fbda63Use std::string_view throughout util strencodings/string (Pieter Wuille)8ffbd1412dMake DecodeBase{32,64} take string_view arguments (Pieter Wuille)1a72d62152Generalize ConvertBits to permit transforming the input (Pieter Wuille)78f3ac51b7Make DecodeBase{32,64} return optional instead of taking bool* (Pieter Wuille)a65931e3ceMake DecodeBase{32,64} always return vector, not string (Pieter Wuille)a4377a0843Reject incorrect base64 in HTTP auth (Pieter Wuille)d648b5120bMake SanitizeString use string_view (Pieter Wuille)963bc9b576Make IsHexNumber use string_view (Pieter Wuille)40062997f2Make IsHex use string_view (Pieter Wuille)c1d165a8c2Make ParseHex use string_view (Pieter Wuille) Pull request description: Make use of `std::string_view` and `std::optional` in the util/{strencodings, string} files. This avoids many temporary string/vector objects being created, while making the interface easier to read. Changes include: * Make all input arguments in functions in util/strencodings and util/string take `std::string_view` instead of `std::string`. * Add `RemovePrefixView` and `TrimStringView` which also *return* `std::string_view` objects (the corresponding `RemovePrefix` and `TrimString` keep returning an `std::string`, as that's needed in many call sites still). * Stop returning `std::string` from `DecodeBase32` and `DecodeBase64`, but return vectors. Base32/64 are fundamentally algorithms for encoding bytes as strings; returning `std::string` from those (especially doing it conditionally based on the input arguments/types) is just bizarre. * Stop taking a `bool* pf_invalid` output argument pointer in `DecodeBase32` and `DecodeBase64`; return an `std::optional` instead. * Make `DecodeBase32` and `DecodeBase64` more efficient by doing the conversion from characters to integer symbols on-the-fly rather than through a temporary vector. ACKs for top commit: MarcoFalke: re-ACKfa7078d84fonly change is rebase and adding a scripted-diff 🍲 martinus: Code review ACKfa7078d84f, found no issue laanwj: Code review ACKfa7078d84fsipa: utACKfa7078d84f(as far as the commit that isn't mine goes) Tree-SHA512: 5cf02e541caef0bcd100466747664bdb828a68a05dae568cbcd0632a53dd3a4c4e85cd8c48ebbd168d4247d5c9666689c16005f1c8ad75b0f057d8683931f664
This commit is contained in:
22 files changed
+208
-252
No files matched your search
@@ -194,16 +194,16 @@ void WalletFrame::gotoVerifyMessageTab(QString addr)
|
||||
|
||||
void WalletFrame::gotoLoadPSBT(bool from_clipboard)
|
||||
{
|
||||
std::string data;
|
||||
std::vector<unsigned char> data;
|
||||
|
||||
if (from_clipboard) {
|
||||
std::string raw = QApplication::clipboard()->text().toStdString();
|
||||
bool invalid;
|
||||
data = DecodeBase64(raw, &invalid);
|
||||
if (invalid) {
|
||||
auto result = DecodeBase64(raw);
|
||||
if (!result) {
|
||||
Q_EMIT message(tr("Error"), tr("Unable to decode PSBT from clipboard (invalid base64)"), CClientUIInterface::MSG_ERROR);
|
||||
return;
|
||||
}
|
||||
data = std::move(*result);
|
||||
} else {
|
||||
QString filename = GUIUtil::getOpenFileName(this,
|
||||
tr("Load Transaction Data"), QString(),
|
||||
@@ -214,12 +214,12 @@ void WalletFrame::gotoLoadPSBT(bool from_clipboard)
|
||||
return;
|
||||
}
|
||||
std::ifstream in{filename.toLocal8Bit().data(), std::ios::binary};
|
||||
data = std::string(std::istreambuf_iterator<char>{in}, {});
|
||||
data.assign(std::istream_iterator<unsigned char>{in}, {});
|
||||
}
|
||||
|
||||
std::string error;
|
||||
PartiallySignedTransaction psbtx;
|
||||
if (!DecodeRawPSBT(psbtx, data, error)) {
|
||||
if (!DecodeRawPSBT(psbtx, MakeByteSpan(data), error)) {
|
||||
Q_EMIT message(tr("Error"), tr("Unable to decode PSBT") + "\n" + QString::fromStdString(error), CClientUIInterface::MSG_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user