aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/webcore/response.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/webcore/response.zig')
-rw-r--r--src/javascript/jsc/webcore/response.zig28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index 680e8aa06..8b698bdea 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -105,16 +105,30 @@ pub const Response = struct {
arguments: []const js.JSValueRef,
exception: js.ExceptionRef,
) js.JSValueRef {
- defer this.body.value = .Empty;
var zig_string = ZigString.init("");
+ var deallocate = false;
+ defer {
+ if (deallocate) {
+ if (this.body.value == .Unconsumed) {
+ this.body.ptr_allocator.?.free(this.body.ptr.?[0..this.body.len]);
+ this.body.ptr_allocator = null;
+ this.body.ptr = null;
+ this.body.len = 0;
+ }
+ }
+
+ this.body.value = .Empty;
+ }
- var js_string = (js.JSValueCreateJSONString(
+ var json_value = (js.JSValueMakeFromJSONString(
ctx,
brk: {
switch (this.body.value) {
.Unconsumed => {
if (this.body.ptr) |_ptr| {
zig_string = ZigString.init(_ptr[0..this.body.len]);
+ deallocate = true;
+
break :brk zig_string.toJSStringRef();
}
@@ -133,8 +147,6 @@ pub const Response = struct {
},
}
},
- 0,
- exception,
) orelse {
var out = std.fmt.bufPrint(&temp_error_buffer, "Invalid JSON\n\n \"{s}\"", .{zig_string.slice()[0..std.math.min(zig_string.len, 4000)]}) catch unreachable;
error_arg_list[0] = ZigString.init(out).toValueGC(VirtualMachine.vm.global).asRef();
@@ -150,16 +162,10 @@ pub const Response = struct {
),
).asRef();
});
- defer js.JSStringRelease(js_string);
return JSPromise.resolvedPromiseValue(
VirtualMachine.vm.global,
- JSValue.fromRef(
- js.JSValueMakeString(
- ctx,
- js_string,
- ),
- ),
+ JSValue.fromRef(json_value),
).asRef();
}
pub fn getArrayBuffer(