aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorGregory Maxwell <[email protected]>2013-09-10 16:07:34 -0700
committerGregory Maxwell <[email protected]>2013-09-10 16:07:34 -0700
commit85311c1ef8b438a93ecf04c100e877fb49634a90 (patch)
tree7ef00e3a06fe4b1afe8cce672c468f40ec01de33 /src/main.cpp
parentMerge pull request #2961 from Diapolo/cosmetic (diff)
parentLonger term workaround for chainstate corruption from negative versions. (diff)
downloaddiscoin-85311c1ef8b438a93ecf04c100e877fb49634a90.tar.xz
discoin-85311c1ef8b438a93ecf04c100e877fb49634a90.zip
Merge pull request #2982 from gmaxwell/20130908_ccoins_corrupt
Longer term workaround for chainstate corruption from negative versions.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 89761dc2b..4b2c32e34 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -466,7 +466,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans)
bool IsStandardTx(const CTransaction& tx, string& reason)
{
- if (tx.nVersion > CTransaction::CURRENT_VERSION) {
+ if (tx.nVersion > CTransaction::CURRENT_VERSION || tx.nVersion < 1) {
reason = "version";
return false;
}
@@ -1778,6 +1778,11 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
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");