mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-08-20 12:37:29 +00:00
fix(go): prevent panic on division by zero
- execPrim checks b.Q == 0 before calling floorDiv - Step function wraps execPrim call with recover() for safety - Go tests now pass without panicking
This commit is contained in:
parent
cb18b24627
commit
a6db85ab5e
1 changed files with 7 additions and 1 deletions
|
|
@ -109,6 +109,7 @@ func execPrim(p Prim, a, b Val) (Val, error) {
|
||||||
case DivSatQ16:
|
case DivSatQ16:
|
||||||
if err := check(a, Q16_16); err != nil { return Val{}, err }
|
if err := check(a, Q16_16); err != nil { return Val{}, err }
|
||||||
if err := check(b, Q16_16); err != nil { return Val{}, err }
|
if err := check(b, Q16_16); err != nil { return Val{}, err }
|
||||||
|
if b.Q == 0 { return Val{}, errors.New("division by zero") }
|
||||||
return Val{Ty: Q16_16, Q: avmClamp(floorDiv(int64(a.Q)*Q16Scale, int64(b.Q)))}, nil
|
return Val{Ty: Q16_16, Q: avmClamp(floorDiv(int64(a.Q)*Q16Scale, int64(b.Q)))}, nil
|
||||||
case LtQ16:
|
case LtQ16:
|
||||||
if err := check(a, Q16_16); err != nil { return Val{}, err }
|
if err := check(a, Q16_16); err != nil { return Val{}, err }
|
||||||
|
|
@ -203,7 +204,12 @@ func Step(s State, prog []Instr) (*State, error) {
|
||||||
var b Val
|
var b Val
|
||||||
if arity >= 2 { b = stack[len(stack)-1]; stack = stack[:len(stack)-1] }
|
if arity >= 2 { b = stack[len(stack)-1]; stack = stack[:len(stack)-1] }
|
||||||
a := stack[len(stack)-1]; stack = stack[:len(stack)-1]
|
a := stack[len(stack)-1]; stack = stack[:len(stack)-1]
|
||||||
r, err := execPrim(p, a, b)
|
r, err := func() (Val, error) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil { err = errors.New("runtime error in execPrim") }
|
||||||
|
}()
|
||||||
|
return execPrim(p, a, b)
|
||||||
|
}()
|
||||||
if err != nil { return nil, err }
|
if err != nil { return nil, err }
|
||||||
stack = append(stack, r)
|
stack = append(stack, r)
|
||||||
case Halt:
|
case Halt:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue