aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/base.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-09 05:09:48 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-09 05:09:48 -0700
commitb8eea5cc4a1f9b6dd1a6a08d531e8e096c60cb5b (patch)
tree6f8f363e8084add4e6eb311347912b64ed2ad5dc /src/javascript/jsc/base.zig
parentc88dd2c52c7a48d846b4ee3d9d8e113a0ec9b0b6 (diff)
downloadbun-b8eea5cc4a1f9b6dd1a6a08d531e8e096c60cb5b.tar.gz
bun-b8eea5cc4a1f9b6dd1a6a08d531e8e096c60cb5b.tar.zst
bun-b8eea5cc4a1f9b6dd1a6a08d531e8e096c60cb5b.zip
fix some memory leaks with strings
Diffstat (limited to 'src/javascript/jsc/base.zig')
-rw-r--r--src/javascript/jsc/base.zig21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/javascript/jsc/base.zig b/src/javascript/jsc/base.zig
index 777a5d6ef..0d128c0f3 100644
--- a/src/javascript/jsc/base.zig
+++ b/src/javascript/jsc/base.zig
@@ -2151,21 +2151,26 @@ pub fn JSError(
ctx: js.JSContextRef,
exception: ExceptionValueRef,
) void {
- var error_args: [1]js.JSValueRef = undefined;
@setCold(true);
if (comptime std.meta.fields(@TypeOf(args)).len == 0) {
var zig_str = JSC.ZigString.init(fmt);
- zig_str.detectEncoding();
- error_args[0] = zig_str.toValueAuto(ctx.ptr()).asObjectRef();
- exception.* = js.JSObjectMakeError(ctx, 1, &error_args, null);
+ if (comptime !strings.isAllASCII(fmt)) {
+ zig_str.markUTF16();
+ }
+
+ exception.* = zig_str.toErrorInstance(ctx).asObjectRef();
} else {
- var buf = std.fmt.allocPrint(default_allocator, fmt, args) catch unreachable;
+ var fallback = std.heap.stackFallback(256, default_allocator);
+ var allocator = fallback.get();
+
+ var buf = std.fmt.allocPrint(allocator, fmt, args) catch unreachable;
var zig_str = JSC.ZigString.init(buf);
zig_str.detectEncoding();
-
- error_args[0] = zig_str.toValueGC(ctx.ptr()).asObjectRef();
- exception.* = js.JSObjectMakeError(ctx, 1, &error_args, null);
+ zig_str.mark();
+ // it alwayas clones
+ exception.* = zig_str.toErrorInstance(ctx).asObjectRef();
+ allocator.free(buf);
}
}