aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-04 23:29:21 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-04 23:29:21 -0800
commit224f9800810fe67d9cb4991aef7c274a97f61e33 (patch)
tree6e84835b3495ee50305b094e66a799ec06f7e87d
parent2369bade48e77cef68181d0634201f95e791eb83 (diff)
downloadbun-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.zig19
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;
}