Call existsProviderTxConflict after CheckSpecialTx (#2690)

Otherwise we might end up passing and invalid proTx into it, causing
assertions to fail and thus crash the process.
This commit is contained in:
Alexander Block 2019-02-06 17:54:10 +01:00
parent 23eb70cb77
commit 6ada90c11c

View File

@ -665,10 +665,6 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
if (fRequireStandard && !IsStandardTx(tx, reason)) if (fRequireStandard && !IsStandardTx(tx, reason))
return state.DoS(0, false, REJECT_NONSTANDARD, reason); return state.DoS(0, false, REJECT_NONSTANDARD, reason);
if (pool.existsProviderTxConflict(tx)) {
return state.DoS(0, false, REJECT_DUPLICATE, "protx-dup");
}
// Only accept nLockTime-using transactions that can be mined in the next // Only accept nLockTime-using transactions that can be mined in the next
// block; we don't want our mempool filled up with transactions that can't // block; we don't want our mempool filled up with transactions that can't
// be mined yet. // be mined yet.
@ -869,6 +865,10 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
if (!CheckSpecialTx(tx, chainActive.Tip(), state)) if (!CheckSpecialTx(tx, chainActive.Tip(), state))
return false; return false;
if (pool.existsProviderTxConflict(tx)) {
return state.DoS(0, false, REJECT_DUPLICATE, "protx-dup");
}
// If we aren't going to actually accept it but just were verifying it, we are fine already // If we aren't going to actually accept it but just were verifying it, we are fine already
if(fDryRun) return true; if(fDryRun) return true;