allow invalid opcodes in dead execution paths
This commit is contained in:
parent
f6f060ef4b
commit
27d2b27d3f
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue