console: fix a couple panics

This commit is contained in:
Guillaume Ballet 2019-06-28 09:25:15 +02:00
parent 2b360f25c2
commit 7cecc39fd8
2 changed files with 13 additions and 5 deletions

View file

@ -320,7 +320,7 @@ func (re *JSRE) Compile(filename string, src string) (err error) {
} }
func compileAndRun(vm *goja.Runtime, filename string, src string) (goja.Value, error) { func compileAndRun(vm *goja.Runtime, filename string, src string) (goja.Value, error) {
script, err := goja.Compile(filename, src, true) script, err := goja.Compile(filename, src, false)
if err != nil { if err != nil {
return goja.Null(), err return goja.Null(), err
} }

View file

@ -226,8 +226,15 @@ func iterOwnAndConstructorKeys(vm *goja.Runtime, obj *goja.Object, f func(string
} }
func iterOwnKeys(vm *goja.Runtime, obj *goja.Object, f func(string)) { func iterOwnKeys(vm *goja.Runtime, obj *goja.Object, f func(string)) {
getOwnPropertyNames, _ := goja.AssertFunction(vm.Get("Object.getOwnPropertyNames")) Object := vm.Get("Object").ToObject(vm)
rv, _ := getOwnPropertyNames(obj) getOwnPropertyNames, isFunc := goja.AssertFunction(Object.Get("getOwnPropertyNames"))
if !isFunc {
panic(vm.ToValue("Object.getOwnPropertyNames isn't a function"))
}
rv, err := getOwnPropertyNames(goja.Null(), obj)
if err != nil {
panic(vm.ToValue(fmt.Sprintf("Error getting object properties: %v", err)))
}
gv := rv.Export() gv := rv.Export()
switch gv := gv.(type) { switch gv := gv.(type) {
case []interface{}: case []interface{}:
@ -251,11 +258,12 @@ func (ctx ppctx) isBigNumber(v *goja.Object) bool {
} }
} }
// Handle default constructor. // Handle default constructor.
BigNumber := ctx.vm.Get("BigNumber.prototype").ToObject(ctx.vm) BigNumber := ctx.vm.Get("BigNumber").ToObject(ctx.vm)
if BigNumber == nil { if BigNumber == nil {
return false return false
} }
isPrototypeOf, exists := goja.AssertFunction(BigNumber.Get("isPrototypeOf")) prototype := BigNumber.Get("prototype").ToObject(ctx.vm)
isPrototypeOf, exists := goja.AssertFunction(prototype.Get("isPrototypeOf"))
if !exists { if !exists {
return false return false
} }