From c35996c2334c39153d65915c0305257214ca9d59 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Thu, 26 Mar 2020 08:30:32 +0100 Subject: [PATCH] test(interface-types) Test negative pointer or length in `string.lift_memory`. --- src/interpreter/instructions/strings.rs | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/interpreter/instructions/strings.rs b/src/interpreter/instructions/strings.rs index d84da47..8a40ed2 100644 --- a/src/interpreter/instructions/strings.rs +++ b/src/interpreter/instructions/strings.rs @@ -222,6 +222,42 @@ mod tests { stack: [InterfaceValue::String("".into())], ); + test_executable_instruction!( + test_string_lift_memory__negative_pointer = + instructions: [ + Instruction::ArgumentGet { index: 0 }, + Instruction::ArgumentGet { index: 1 }, + Instruction::StringLiftMemory, + ], + invocation_inputs: [ + InterfaceValue::I32(-42), + InterfaceValue::I32(13), + ], + instance: Instance { + memory: Memory::new("Hello!".as_bytes().iter().map(|u| Cell::new(*u)).collect()), + ..Default::default() + }, + error: r#"`string.lift_memory` read the value of `pointer` which must be positive"#, + ); + + test_executable_instruction!( + test_string_lift_memory__negative_length = + instructions: [ + Instruction::ArgumentGet { index: 0 }, + Instruction::ArgumentGet { index: 1 }, + Instruction::StringLiftMemory, + ], + invocation_inputs: [ + InterfaceValue::I32(0), + InterfaceValue::I32(-1), + ], + instance: Instance { + memory: Memory::new("Hello!".as_bytes().iter().map(|u| Cell::new(*u)).collect()), + ..Default::default() + }, + error: r#"`string.lift_memory` read the value of `length` which must be positive"#, + ); + test_executable_instruction!( test_string_lift_memory__read_out_of_memory = instructions: [