diff options
Diffstat (limited to 'src/script/sign.h')
-rw-r--r-- | src/script/sign.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/script/sign.h b/src/script/sign.h index 250b637035..d12d0b5874 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -284,12 +284,16 @@ struct PSBTInput case PSBT_IN_NON_WITNESS_UTXO: if (non_witness_utxo) { throw std::ios_base::failure("Duplicate Key, input non-witness utxo already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Non-witness utxo key is more than one byte type"); } UnserializeFromVector(s, non_witness_utxo); break; case PSBT_IN_WITNESS_UTXO: if (!witness_utxo.IsNull()) { throw std::ios_base::failure("Duplicate Key, input witness utxo already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Witness utxo key is more than one byte type"); } UnserializeFromVector(s, witness_utxo); break; @@ -319,6 +323,8 @@ struct PSBTInput case PSBT_IN_SIGHASH: if (sighash_type > 0) { throw std::ios_base::failure("Duplicate Key, input sighash type already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Sighash type key is more than one byte type"); } UnserializeFromVector(s, sighash_type); break; @@ -326,6 +332,8 @@ struct PSBTInput { if (!redeem_script.empty()) { throw std::ios_base::failure("Duplicate Key, input redeemScript already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Input redeemScript key is more than one byte type"); } s >> redeem_script; break; @@ -334,6 +342,8 @@ struct PSBTInput { if (!witness_script.empty()) { throw std::ios_base::failure("Duplicate Key, input witnessScript already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Input witnessScript key is more than one byte type"); } s >> witness_script; break; @@ -347,6 +357,8 @@ struct PSBTInput { if (!final_script_sig.empty()) { throw std::ios_base::failure("Duplicate Key, input final scriptSig already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Final scriptSig key is more than one byte type"); } s >> final_script_sig; break; @@ -355,6 +367,8 @@ struct PSBTInput { if (!final_script_witness.IsNull()) { throw std::ios_base::failure("Duplicate Key, input final scriptWitness already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Final scriptWitness key is more than one byte type"); } UnserializeFromVector(s, final_script_witness.stack); break; @@ -442,6 +456,8 @@ struct PSBTOutput { if (!redeem_script.empty()) { throw std::ios_base::failure("Duplicate Key, output redeemScript already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Output redeemScript key is more than one byte type"); } s >> redeem_script; break; @@ -450,6 +466,8 @@ struct PSBTOutput { if (!witness_script.empty()) { throw std::ios_base::failure("Duplicate Key, output witnessScript already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Output witnessScript key is more than one byte type"); } s >> witness_script; break; @@ -564,6 +582,8 @@ struct PartiallySignedTransaction { if (tx) { throw std::ios_base::failure("Duplicate Key, unsigned tx already provided"); + } else if (key.size() != 1) { + throw std::ios_base::failure("Global unsigned tx key is more than one byte type"); } CMutableTransaction mtx; UnserializeFromVector(s, mtx); |