diff --git a/opcode.go b/opcode.go index bb32eeb94..2fcbd9fbd 100644 --- a/opcode.go +++ b/opcode.go @@ -840,7 +840,9 @@ func opcodeEndif(op *parsedOpcode, s *Script) error { return StackErrNoIf } - s.condStack = s.condStack[1:] + stk := make([]int, len(s.condStack) -1, len(s.condStack) -1) + copy(stk, s.condStack[1:]) + s.condStack = stk return nil } diff --git a/stack.go b/stack.go index 952d5bdb4..656c16a9e 100644 --- a/stack.go +++ b/stack.go @@ -173,7 +173,9 @@ func (s *Stack) nipN(idx int) (so []byte, err error) { if idx == 0 { s.stk = s.stk[:sz-1] } else if idx == sz-1 { - s.stk = s.stk[1:] + s1 := make([][]byte, sz - 1, sz - 1) + copy(s1, s.stk[1:]) + s.stk = s1 } else { s1 := s.stk[sz-idx : sz] s.stk = s.stk[:sz-idx-1]