diff options
author | pierrenn <git@pnn.sh> | 2020-03-26 07:48:48 +0900 |
---|---|---|
committer | pierrenn <git@pnn.sh> | 2020-03-28 08:38:07 +0900 |
commit | e980214bc4fd49530e8d50fe0a6657b8583bc6b5 (patch) | |
tree | 75d1988a8bc31563704fd8dba936a175624a0eae | |
parent | 97b0687501cee77a9170f9e288755a5d268e9bd4 (diff) |
serialization: prevent int overflow for big Coin::nHeight
-rw-r--r-- | src/coins.h | 2 | ||||
-rw-r--r-- | src/undo.h | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/coins.h b/src/coins.h index e71c8a47bc..ea2e759b54 100644 --- a/src/coins.h +++ b/src/coins.h @@ -59,7 +59,7 @@ public: template<typename Stream> void Serialize(Stream &s) const { assert(!IsSpent()); - uint32_t code = nHeight * 2 + fCoinBase; + uint32_t code = nHeight * uint32_t{2} + fCoinBase; ::Serialize(s, VARINT(code)); ::Serialize(s, Using<TxOutCompression>(out)); } diff --git a/src/undo.h b/src/undo.h index 47f132c7d8..80bbd146f3 100644 --- a/src/undo.h +++ b/src/undo.h @@ -24,7 +24,7 @@ struct TxInUndoFormatter { template<typename Stream> void Ser(Stream &s, const Coin& txout) { - ::Serialize(s, VARINT(txout.nHeight * 2 + (txout.fCoinBase ? 1u : 0u))); + ::Serialize(s, VARINT(txout.nHeight * uint32_t{2} + txout.fCoinBase )); if (txout.nHeight > 0) { // Required to maintain compatibility with older undo format. ::Serialize(s, (unsigned char)0); @@ -34,9 +34,9 @@ struct TxInUndoFormatter template<typename Stream> void Unser(Stream &s, Coin& txout) { - unsigned int nCode = 0; + uint32_t nCode = 0; ::Unserialize(s, VARINT(nCode)); - txout.nHeight = nCode / 2; + txout.nHeight = nCode >> 1; txout.fCoinBase = nCode & 1; if (txout.nHeight > 0) { // Old versions stored the version number for the last spend of |