From 78b9893d020e8b1351565f1adbf591cb32f6dc90 Mon Sep 17 00:00:00 2001 From: Glenn Willen Date: Tue, 29 Jan 2019 22:51:56 -0800 Subject: Remove op== on PSBTs; check compatibility in Merge Remove the op== on PartiallySignedTransaction, which only checks that the CTransactions are equal. Instead, check this directly in Merge, and return false if the CTransactions are not equal (so the PSBTs cannot be merged.) --- src/psbt.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/psbt.cpp') diff --git a/src/psbt.cpp b/src/psbt.cpp index 97fb39f1c8..06032d6953 100644 --- a/src/psbt.cpp +++ b/src/psbt.cpp @@ -16,8 +16,13 @@ bool PartiallySignedTransaction::IsNull() const return !tx && inputs.empty() && outputs.empty() && unknown.empty(); } -void PartiallySignedTransaction::Merge(const PartiallySignedTransaction& psbt) +bool PartiallySignedTransaction::Merge(const PartiallySignedTransaction& psbt) { + // Prohibited to merge two PSBTs over different transactions + if (tx->GetHash() != psbt.tx->GetHash()) { + return false; + } + for (unsigned int i = 0; i < inputs.size(); ++i) { inputs[i].Merge(psbt.inputs[i]); } @@ -25,6 +30,8 @@ void PartiallySignedTransaction::Merge(const PartiallySignedTransaction& psbt) outputs[i].Merge(psbt.outputs[i]); } unknown.insert(psbt.unknown.begin(), psbt.unknown.end()); + + return true; } bool PartiallySignedTransaction::IsSane() const -- cgit v1.2.3