From c8d94c981b1468a89562ccff4c554582a5f3e067 Mon Sep 17 00:00:00 2001 From: Tomusdrw Date: Sun, 17 Jan 2016 14:08:31 +0100 Subject: [PATCH] Additional check before conversion --- src/evm/interpreter.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/evm/interpreter.rs b/src/evm/interpreter.rs index f3c5920e5..47b66bd2c 100644 --- a/src/evm/interpreter.rs +++ b/src/evm/interpreter.rs @@ -491,8 +491,12 @@ impl Interpreter { // s * memory_gas + s * s / quad_coeff_div let a = overflowing!(s.overflowing_mul(U256::from(schedule.memory_gas))); // We need to go to U512 to calculate s*s/quad_coeff_div - let b = U256::from(U512::from(s) * U512::from(s) / U512::from(schedule.quad_coeff_div)); - Ok(overflowing!(a.overflowing_add(b))) + let b = U512::from(s) * U512::from(s) / U512::from(schedule.quad_coeff_div); + if b > U512::from(!U256::zero()) { + Err(evm::Error::OutOfGas) + } else { + Ok(overflowing!(a.overflowing_add(U256::from(b)))) + } }; let current_mem_size = U256::from(current_mem_size); let req_mem_size_rounded = (overflowing!(mem_size.overflowing_add(U256::from(31))) >> 5) << 5;