diff --git a/tendermint/src/vote/validator_index.rs b/tendermint/src/vote/validator_index.rs index 7f04967c1..d150c218a 100644 --- a/tendermint/src/vote/validator_index.rs +++ b/tendermint/src/vote/validator_index.rs @@ -44,9 +44,9 @@ impl TryFrom for ValidatorIndex { type Error = Error; fn try_from(value: usize) -> Result { - Ok(ValidatorIndex( - value.try_into().map_err(Error::integer_overflow)?, - )) + // Convert to i32 first to perform ≤ i32::MAX check. + let value = i32::try_from(value).map_err(Error::integer_overflow)?; + ValidatorIndex::try_from(value) } } @@ -88,3 +88,11 @@ impl FromStr for ValidatorIndex { ) } } + +#[test] +fn test_i32_max_limit() { + assert!(ValidatorIndex::try_from(u32::MAX).is_err()); + assert!(ValidatorIndex::try_from(u32::MAX as usize).is_err()); + let value = u32::MAX.to_string(); + assert!(ValidatorIndex::from_str(&value).is_err()); +}