From ae599d9b83d447fbbc3299048403b0c880f8b09d Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 27 Feb 2025 15:15:27 +0800 Subject: [PATCH] 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 --- neo/assistant/object.go | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/neo/assistant/object.go b/neo/assistant/object.go index 9a0e36d9..3ca75ec9 100644 --- a/neo/assistant/object.go +++ b/neo/assistant/object.go @@ -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