diff options
author | 2022-12-17 11:18:11 -0800 | |
---|---|---|
committer | 2022-12-17 12:26:19 -0800 | |
commit | 1bdb4b2466c277aeba0f8de81601d8a46be049d4 (patch) | |
tree | 2cebaa2ba3dc24cf786095bfaf99f395edeb568f /src | |
parent | ca0ab9508fc2eacbeb2df06cdaf16e91c33b5f12 (diff) | |
download | bun-1bdb4b2466c277aeba0f8de81601d8a46be049d4.tar.gz bun-1bdb4b2466c277aeba0f8de81601d8a46be049d4.tar.zst bun-1bdb4b2466c277aeba0f8de81601d8a46be049d4.zip |
[napi] Fix assertion failure when argv is null
Diffstat (limited to 'src')
-rw-r--r-- | src/napi/napi.zig | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/napi/napi.zig b/src/napi/napi.zig index bcbbaf417..e9df5cfb2 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -614,6 +614,11 @@ pub export fn napi_strict_equals(env: napi_env, lhs: napi_value, rhs: napi_value } pub export fn napi_call_function(env: napi_env, recv: napi_value, func: napi_value, argc: usize, argv: [*c]const napi_value, result: *napi_value) napi_status { JSC.markBinding(@src()); + + if (argc > 0 and argv == null) { + return .invalid_arg; + } + var exception = [_]JSC.C.JSValueRef{null}; result.* = JSC.C.JSObjectCallAsFunctionReturnValue( @@ -621,7 +626,10 @@ pub export fn napi_call_function(env: napi_env, recv: napi_value, func: napi_val func.asObjectRef(), recv.asObjectRef(), argc, - @ptrCast([*]const JSC.C.JSValueRef, argv), + if (argv != null) + @ptrCast([*]const JSC.C.JSValueRef, argv) + else + null, ); if (exception[0] != null) { return .generic_failure; @@ -630,13 +638,22 @@ pub export fn napi_call_function(env: napi_env, recv: napi_value, func: napi_val return .ok; } pub export fn napi_new_instance(env: napi_env, constructor: napi_value, argc: usize, argv: [*c]const napi_value, result: *napi_value) napi_status { + JSC.markBinding(@src()); + + if (argc > 0 and argv == null) { + return .invalid_arg; + } + var exception = [_]JSC.C.JSValueRef{null}; result.* = JSValue.c( JSC.C.JSObjectCallAsConstructor( env.ref(), constructor.asObjectRef(), argc, - @ptrCast([*]const JSC.C.JSValueRef, argv), + if (argv != null) + @ptrCast([*]const JSC.C.JSValueRef, argv) + else + null, &exception, ), ); @@ -648,7 +665,7 @@ pub export fn napi_new_instance(env: napi_env, constructor: napi_value, argc: us } pub export fn napi_instanceof(env: napi_env, object: napi_value, constructor: napi_value, result: *bool) napi_status { // TODO: does this throw object_expected in node? - result.* = object.isInstanceOf(env, constructor); + result.* = object.isCell() and object.isInstanceOf(env, constructor); return .ok; } pub extern fn napi_get_cb_info(env: napi_env, cbinfo: napi_callback_info, argc: [*c]usize, argv: *napi_value, this_arg: *napi_value, data: [*]*anyopaque) napi_status; |