@ -466,7 +466,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans)
@@ -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
@@ -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 " ) ;