aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpierrenn <git@pnn.sh>2020-03-26 07:48:48 +0900
committerpierrenn <git@pnn.sh>2020-03-28 08:38:07 +0900
commite980214bc4fd49530e8d50fe0a6657b8583bc6b5 (patch)
tree75d1988a8bc31563704fd8dba936a175624a0eae /src
parent97b0687501cee77a9170f9e288755a5d268e9bd4 (diff)
serialization: prevent int overflow for big Coin::nHeight
Diffstat (limited to 'src')
-rw-r--r--src/coins.h2
-rw-r--r--src/undo.h6
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