diff --git a/script/src/builder.rs b/script/src/builder.rs index ddf1f71a..97bbfcd0 100644 --- a/script/src/builder.rs +++ b/script/src/builder.rs @@ -50,6 +50,11 @@ impl Builder { self } + pub fn push_invalid_opcode(mut self) -> Self { + self.data.push(0xff); + self + } + pub fn into_script(self) -> Script { Script::new(self.data) } diff --git a/script/src/interpreter.rs b/script/src/interpreter.rs index 1a15136c..e3bdae66 100644 --- a/script/src/interpreter.rs +++ b/script/src/interpreter.rs @@ -1909,5 +1909,19 @@ mod tests { let flags = VerificationFlags::default(); assert_eq!(verify_script(&input, &output, &flags, &checker), Ok(())); } + + #[test] + fn test_invalid_opcode_in_dead_execution_path_b83() { + let script = Builder::default() + .push_opcode(Opcode::OP_0) + .push_opcode(Opcode::OP_IF) + .push_invalid_opcode() + .push_opcode(Opcode::OP_ELSE) + .push_opcode(Opcode::OP_1) + .push_opcode(Opcode::OP_ENDIF) + .into_script(); + let result = Err(Error::BadOpcode); + basic_test(&script, result, vec![].into()); + } }