mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-12 11:19:08 -05:00
validation: Check chain tip is non-null in CheckFinalTx
...also update comments to remove mention of ::ChainActive() From: https://github.com/bitcoin/bitcoin/pull/20750#discussion_r579400663 > Also, what about passing a const reference instead of a pointer? I > know this is only theoretical, but previously if the tip was nullptr, > then Height() evaluated to -1, now it evaluates to UB
This commit is contained in:
parent
7fca189a2a
commit
9da106be4d
1 changed files with 3 additions and 2 deletions
|
@ -211,6 +211,7 @@ static FlatFileSeq UndoFileSeq();
|
||||||
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags)
|
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
|
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
||||||
assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*active_chain_tip));
|
assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*active_chain_tip));
|
||||||
|
|
||||||
// By convention a negative value for flags indicates that the
|
// By convention a negative value for flags indicates that the
|
||||||
|
@ -221,12 +222,12 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, i
|
||||||
// scheduled, so no flags are set.
|
// scheduled, so no flags are set.
|
||||||
flags = std::max(flags, 0);
|
flags = std::max(flags, 0);
|
||||||
|
|
||||||
// CheckFinalTx() uses ::ChainActive().Height()+1 to evaluate
|
// CheckFinalTx() uses active_chain_tip.Height()+1 to evaluate
|
||||||
// nLockTime because when IsFinalTx() is called within
|
// nLockTime because when IsFinalTx() is called within
|
||||||
// CBlock::AcceptBlock(), the height of the block *being*
|
// CBlock::AcceptBlock(), the height of the block *being*
|
||||||
// evaluated is what is used. Thus if we want to know if a
|
// evaluated is what is used. Thus if we want to know if a
|
||||||
// transaction can be part of the *next* block, we need to call
|
// transaction can be part of the *next* block, we need to call
|
||||||
// IsFinalTx() with one more than ::ChainActive().Height().
|
// IsFinalTx() with one more than active_chain_tip.Height().
|
||||||
const int nBlockHeight = active_chain_tip->nHeight + 1;
|
const int nBlockHeight = active_chain_tip->nHeight + 1;
|
||||||
|
|
||||||
// BIP113 requires that time-locked transactions have nLockTime set to
|
// BIP113 requires that time-locked transactions have nLockTime set to
|
||||||
|
|
Loading…
Add table
Reference in a new issue