From 46ecb161910dc19a889f65e1702a403de0453bbf Mon Sep 17 00:00:00 2001 From: Tomusdrw Date: Fri, 15 Jan 2016 19:48:51 +0100 Subject: [PATCH] Fixing BYTE instruction --- src/evm/interpreter.rs | 3 ++- src/tests/executive.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/evm/interpreter.rs b/src/evm/interpreter.rs index 8f0bd80bb..b5db76dbd 100644 --- a/src/evm/interpreter.rs +++ b/src/evm/interpreter.rs @@ -837,8 +837,9 @@ impl Interpreter { }, instructions::BYTE => { let word = stack.pop_back(); + let val = stack.pop_back(); let byte = if word < U256::from(32) { - word >> (8 * (31 - word.low_u64() as usize)) + (val >> (8 * (31 - word.low_u64() as usize))) & U256::from(0xff) } else { U256::zero() }; diff --git a/src/tests/executive.rs b/src/tests/executive.rs index 68d78af29..47420db2f 100644 --- a/src/tests/executive.rs +++ b/src/tests/executive.rs @@ -168,7 +168,7 @@ fn do_json_test_for(vm: &VMType, json_data: &[u8]) -> Vec { let json = Json::from_str(::std::str::from_utf8(json_data).unwrap()).expect("Json is invalid"); let mut failed = Vec::new(); for (name, test) in json.as_object().unwrap() { - // if name != "signextend_Overflow_dj42" { + // if name != "byte0" { // continue; // } println!("name: {:?}", name);