diff --git a/packages/script/runtime.go b/packages/script/runtime.go index 6a289206..99648298 100644 --- a/packages/script/runtime.go +++ b/packages/script/runtime.go @@ -254,8 +254,12 @@ func (rt *RunTime) callFunc(cmd uint16, obj *ObjInfo) (err error) { pars[count-i] = reflect.Zero(reflect.TypeOf(``)) } } - if i > 0 { + if i > 0 && size-i >= 0 { pars[in-1] = reflect.ValueOf(rt.stack[size-i : size]) + } else { + if !pars[in-1].IsValid() { + pars[in-1] = reflect.Zero(finfo.Params[in-1]) + } } if finfo.Name == `ExecContract` && (pars[2].Kind() != reflect.String || !pars[3].IsValid()) { return fmt.Errorf(`unknown function %v`, pars[1]) @@ -265,6 +269,9 @@ func (rt *RunTime) callFunc(cmd uint16, obj *ObjInfo) (err error) { } else { result = foo.Call(pars) } + if shift < 0 { + shift = 0 + } rt.resetByIdx(shift) if stack != nil { stack.PopStack(finfo.Name)