Browse Source

Avoid using sizes on non-fixed-width types to derive protocol constants.

Thanks to awemany for pointing this out.
0.15
Gregory Maxwell 7 years ago
parent
commit
095b917464
  1. 7
      src/validation.cpp
  2. 2
      src/wallet/wallet.cpp

7
src/validation.cpp

@ -20,6 +20,7 @@
#include "init.h" #include "init.h"
#include "policy/fees.h" #include "policy/fees.h"
#include "policy/policy.h" #include "policy/policy.h"
#include "policy/rbf.h"
#include "pow.h" #include "pow.h"
#include "primitives/block.h" #include "primitives/block.h"
#include "primitives/transaction.h" #include "primitives/transaction.h"
@ -488,9 +489,9 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool
if (!setConflicts.count(ptxConflicting->GetHash())) if (!setConflicts.count(ptxConflicting->GetHash()))
{ {
// Allow opt-out of transaction replacement by setting // Allow opt-out of transaction replacement by setting
// nSequence >= maxint-1 on all inputs. // nSequence > MAX_BIP125_RBF_SEQUENCE (SEQUENCE_FINAL-2) on all inputs.
// //
// maxint-1 is picked to still allow use of nLockTime by // SEQUENCE_FINAL-1 is picked to still allow use of nLockTime by
// non-replaceable transactions. All inputs rather than just one // non-replaceable transactions. All inputs rather than just one
// is for the sake of multi-party protocols, where we don't // is for the sake of multi-party protocols, where we don't
// want a single party to be able to disable replacement. // want a single party to be able to disable replacement.
@ -504,7 +505,7 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool
{ {
for (const CTxIn &_txin : ptxConflicting->vin) for (const CTxIn &_txin : ptxConflicting->vin)
{ {
if (_txin.nSequence < std::numeric_limits<unsigned int>::max()-1) if (_txin.nSequence <= MAX_BIP125_RBF_SEQUENCE)
{ {
fReplacementOptOut = false; fReplacementOptOut = false;
break; break;

2
src/wallet/wallet.cpp

@ -2723,7 +2723,7 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletT
// to avoid conflicting with other possible uses of nSequence, // to avoid conflicting with other possible uses of nSequence,
// and in the spirit of "smallest possible change from prior // and in the spirit of "smallest possible change from prior
// behavior." // behavior."
const uint32_t nSequence = coin_control.signalRbf ? MAX_BIP125_RBF_SEQUENCE : (std::numeric_limits<unsigned int>::max() - 1); const uint32_t nSequence = coin_control.signalRbf ? MAX_BIP125_RBF_SEQUENCE : (CTxIn::SEQUENCE_FINAL - 1);
for (const auto& coin : setCoins) for (const auto& coin : setCoins)
txNew.vin.push_back(CTxIn(coin.outpoint,CScript(), txNew.vin.push_back(CTxIn(coin.outpoint,CScript(),
nSequence)); nSequence));

Loading…
Cancel
Save