0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00

Delete error-prone CScript constructor

This commit is contained in:
Gregory Sanders 2019-05-31 10:01:15 -04:00
parent c7cfd20a77
commit e1a55690e6
3 changed files with 9 additions and 5 deletions

View file

@ -422,7 +422,8 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
if (amount > 0) if (amount > 0)
{ {
CTxOut txout(amount, static_cast<CScript>(std::vector<unsigned char>(24, 0))); // Assumes a p2pkh script size
CTxOut txout(amount, CScript() << std::vector<unsigned char>(24, 0));
txDummy.vout.push_back(txout); txDummy.vout.push_back(txout);
fDust |= IsDust(txout, model->node().getDustRelayFee()); fDust |= IsDust(txout, model->node().getDustRelayFee());
} }
@ -513,7 +514,8 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
// Never create dust outputs; if we would, just add the dust to the fee. // Never create dust outputs; if we would, just add the dust to the fee.
if (nChange > 0 && nChange < MIN_CHANGE) if (nChange > 0 && nChange < MIN_CHANGE)
{ {
CTxOut txout(nChange, static_cast<CScript>(std::vector<unsigned char>(24, 0))); // Assumes a p2pkh script size
CTxOut txout(nChange, CScript() << std::vector<unsigned char>(24, 0));
if (IsDust(txout, model->node().getDustRelayFee())) if (IsDust(txout, model->node().getDustRelayFee()))
{ {
nPayFee += nChange; nPayFee += nChange;

View file

@ -926,7 +926,7 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
// Drop the signature in pre-segwit scripts but not segwit scripts // Drop the signature in pre-segwit scripts but not segwit scripts
if (sigversion == SigVersion::BASE) { if (sigversion == SigVersion::BASE) {
int found = FindAndDelete(scriptCode, CScript(vchSig)); int found = FindAndDelete(scriptCode, CScript() << vchSig);
if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE)) if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE))
return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE); return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE);
} }
@ -992,7 +992,7 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
{ {
valtype& vchSig = stacktop(-isig-k); valtype& vchSig = stacktop(-isig-k);
if (sigversion == SigVersion::BASE) { if (sigversion == SigVersion::BASE) {
int found = FindAndDelete(scriptCode, CScript(vchSig)); int found = FindAndDelete(scriptCode, CScript() << vchSig);
if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE)) if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE))
return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE); return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE);
} }

View file

@ -437,7 +437,9 @@ public:
explicit CScript(opcodetype b) { operator<<(b); } explicit CScript(opcodetype b) { operator<<(b); }
explicit CScript(const CScriptNum& b) { operator<<(b); } explicit CScript(const CScriptNum& b) { operator<<(b); }
explicit CScript(const std::vector<unsigned char>& b) { operator<<(b); } // delete non-existent constructor to defend against future introduction
// e.g. via prevector
explicit CScript(const std::vector<unsigned char>& b) = delete;
CScript& operator<<(int64_t b) { return push_int64(b); } CScript& operator<<(int64_t b) { return push_int64(b); }