allow invalid opcodes in dead execution paths

This commit is contained in:
debris 2016-11-30 16:36:12 +01:00
parent f6f060ef4b
commit 27d2b27d3f
1 changed files with 10 additions and 3 deletions

View File

@ -306,7 +306,14 @@ pub fn eval_script(
while pc < script.len() { while pc < script.len() {
let executing = exec_stack.iter().all(|x| *x); let executing = exec_stack.iter().all(|x| *x);
let instruction = try!(script.get_instruction(pc)); let instruction = match script.get_instruction(pc) {
Ok(i) => i,
Err(Error::BadOpcode) if !executing => {
pc += 1;
continue;
},
Err(err) => return Err(err),
};
let opcode = instruction.opcode; let opcode = instruction.opcode;
if let Some(data) = instruction.data { if let Some(data) = instruction.data {
@ -1920,8 +1927,8 @@ mod tests {
.push_opcode(Opcode::OP_1) .push_opcode(Opcode::OP_1)
.push_opcode(Opcode::OP_ENDIF) .push_opcode(Opcode::OP_ENDIF)
.into_script(); .into_script();
let result = Err(Error::BadOpcode); let result = Ok(true);
basic_test(&script, result, vec![].into()); basic_test(&script, result, vec![vec![1].into()].into());
} }
} }