From 0f9a5afa0748d5f182ed78ad2c123adbf58a93d2 Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Thu, 4 Jul 2024 02:27:14 -0400 Subject: [PATCH] Remove possible panic in monero-serai on systems < 32 bits This was done by requiring the system's usize can represent a certain number. --- coins/monero/src/transaction.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/coins/monero/src/transaction.rs b/coins/monero/src/transaction.rs index 8039621e..16061b46 100644 --- a/coins/monero/src/transaction.rs +++ b/coins/monero/src/transaction.rs @@ -169,12 +169,18 @@ impl Timelock { /// Read a Timelock. pub fn read(r: &mut R) -> io::Result { + const TIMELOCK_BLOCK_THRESHOLD: usize = 500_000_000; + let raw = read_varint::<_, u64>(r)?; Ok(if raw == 0 { Timelock::None - } else if raw < u64::from(500_000_000u32) { - // TODO: const-assert 32 or 64 bits - Timelock::Block(usize::try_from(raw).expect("timelock (<32 bits) overflowed usize")) + } else if raw < + u64::try_from(TIMELOCK_BLOCK_THRESHOLD) + .expect("TIMELOCK_BLOCK_THRESHOLD didn't fit in a u64") + { + Timelock::Block(usize::try_from(raw).expect( + "timelock overflowed usize despite being less than a const representable with a usize", + )) } else { Timelock::Time(raw) })