Improve JavaScript argument handling in jsCall method

- Add null check for jsArgs to prevent potential nil pointer dereferences
- Refactor argument parsing logic to handle optional arguments more robustly
- Ensure safe conversion of JavaScript arguments to Go slice
- Enhance error handling for argument type conversion
This commit is contained in:
Max 2025-02-27 15:15:27 +08:00
parent 6b15a1763e
commit ae599d9b83

View file

@ -188,27 +188,28 @@ func jsCall(info *v8go.FunctionCallbackInfo) *v8go.Value {
// Rest args
var jsArgs *v8go.Value
goArgs := []interface{}{}
if len(args) > 3 {
jsArgs = args[3]
}
goArgs := []interface{}{}
if jsArgs.IsArray() {
v, err := bridge.GoValue(jsArgs, info.Context())
if err != nil {
return bridge.JsException(info.Context(), err.Error())
if jsArgs != nil {
if jsArgs.IsArray() {
v, err := bridge.GoValue(jsArgs, info.Context())
if err != nil {
return bridge.JsException(info.Context(), err.Error())
}
arr, ok := v.([]interface{})
if !ok {
return bridge.JsException(info.Context(), "Invalid arguments")
}
goArgs = arr
} else {
v, err := bridge.GoValue(jsArgs, info.Context())
if err != nil {
return bridge.JsException(info.Context(), err.Error())
}
goArgs = []interface{}{v}
}
}
arr, ok := v.([]interface{})
if !ok {
return bridge.JsException(info.Context(), "Invalid arguments")
}
goArgs = arr
} else {
v, err := bridge.GoValue(jsArgs, info.Context())
if err != nil {
return bridge.JsException(info.Context(), err.Error())
}
goArgs = []interface{}{v}
}
// Parse the callback