提交 3fc24013 编写于 作者: O obscuren

Fixed issue with overflowing 256 bit integers

上级 d6b0ab30
......@@ -245,6 +245,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Add(y, x)
ensure256(base)
self.Printf(" = %v", base)
// Pop result back on the stack
stack.Push(base)
......@@ -255,6 +257,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Sub(y, x)
ensure256(base)
self.Printf(" = %v", base)
// Pop result back on the stack
stack.Push(base)
......@@ -265,6 +269,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Mul(y, x)
ensure256(base)
self.Printf(" = %v", base)
// Pop result back on the stack
stack.Push(base)
......@@ -277,6 +283,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Div(y, x)
}
ensure256(base)
self.Printf(" = %v", base)
// Pop result back on the stack
stack.Push(base)
......@@ -289,6 +297,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Div(y, x)
}
ensure256(base)
self.Printf(" = %v", base)
// Pop result back on the stack
stack.Push(base)
......@@ -300,6 +310,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Mod(y, x)
ensure256(base)
self.Printf(" = %v", base)
stack.Push(base)
case SMOD:
......@@ -310,6 +322,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Mod(y, x)
ensure256(base)
self.Printf(" = %v", base)
stack.Push(base)
......@@ -321,6 +335,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base.Exp(y, x, Pow256)
ensure256(base)
self.Printf(" = %v", base)
stack.Push(base)
......@@ -838,3 +854,18 @@ func (self *Vm) Endl() *Vm {
return self
}
func ensure256(x *big.Int) {
maxInt, _ := new(big.Int).SetString("115792089237316195423570985008687907853269984665640564039457584007913129639935", 0)
if x.Cmp(maxInt) >= 0 {
x.SetInt64(0)
return
}
// Could have done this with an OR, but big ints are costly.
if x.Cmp(new(big.Int)) < 0 {
x.SetInt64(0)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册