diff options
-rw-r--r-- | src/main.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index cb0ecdc671..a7501a1b68 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -368,7 +368,7 @@ bool CTxOut::IsDust() const bool CTransaction::IsStandard() const { - if (nVersion > CTransaction::CURRENT_VERSION) + if (nVersion > CTransaction::CURRENT_VERSION || nVersion < 1) return false; if (!IsFinal()) @@ -1499,6 +1499,11 @@ bool CBlock::DisconnectBlock(CValidationState &state, CBlockIndex *pindex, CCoin CCoins &outs = view.GetCoins(hash); CCoins outsBlock = CCoins(tx, pindex->nHeight); + // The CCoins serialization does not serialize negative numbers. + // No network rules currently depend on the version here, so an inconsistency is harmless + // but it must be corrected before txout nversion ever influences a network rule. + if (outsBlock.nVersion < 0) + outs.nVersion = outsBlock.nVersion; if (outs != outsBlock) fClean = fClean && error("DisconnectBlock() : added transaction mismatch? database corrupted"); |