diff options
author | 2022-12-04 23:29:21 -0800 | |
---|---|---|
committer | 2022-12-04 23:29:21 -0800 | |
commit | 224f9800810fe67d9cb4991aef7c274a97f61e33 (patch) | |
tree | 6e84835b3495ee50305b094e66a799ec06f7e87d | |
parent | 2369bade48e77cef68181d0634201f95e791eb83 (diff) | |
download | bun-224f9800810fe67d9cb4991aef7c274a97f61e33.tar.gz bun-224f9800810fe67d9cb4991aef7c274a97f61e33.tar.zst bun-224f9800810fe67d9cb4991aef7c274a97f61e33.zip |
[bun:test] Fix crash when `test("foo")` is called without passing a function
-rw-r--r-- | src/bun.js/test/jest.zig | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/bun.js/test/jest.zig b/src/bun.js/test/jest.zig index 240698753..c0c607622 100644 --- a/src/bun.js/test/jest.zig +++ b/src/bun.js/test/jest.zig @@ -1201,20 +1201,27 @@ pub const TestScope = struct { exception: js.ExceptionRef, is_only: bool, ) js.JSObjectRef { - var args = arguments[0..@minimum(arguments.len, 2)]; + var args = bun.cast([]const JSC.JSValue, arguments[0..@minimum(arguments.len, 2)]); var label: string = ""; if (args.len == 0) { return this; } - if (js.JSValueIsString(ctx, args[0])) { + var label_value = args[0]; + var function_value = if (args.len > 1) args[1] else JSC.JSValue.zero; + + if (label_value.isEmptyOrUndefinedOrNull() or !label_value.isString()) { + function_value = label_value; + label_value = .zero; + } + + if (label_value != .zero) { const allocator = getAllocator(ctx); - label = (JSC.JSValue.fromRef(arguments[0]).toSlice(ctx, allocator).cloneIfNeeded(allocator) catch unreachable).slice(); - args = args[1..]; + label = (label_value.toSlice(ctx, allocator).cloneIfNeeded(allocator) catch unreachable).slice(); } - var function = args[0].?.value(); - if (!function.isCell() or !function.isCallable(ctx.vm())) { + const function = function_value; + if (function.isEmptyOrUndefinedOrNull() or !function.isCell() or !function.isCallable(ctx.vm())) { JSError(getAllocator(ctx), "test() expects a function", .{}, ctx, exception); return this; } |