diff options
Diffstat (limited to 'src/javascript/jsc/api/html_rewriter.zig')
-rw-r--r-- | src/javascript/jsc/api/html_rewriter.zig | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/javascript/jsc/api/html_rewriter.zig b/src/javascript/jsc/api/html_rewriter.zig index 3ea438556..3814c7f8d 100644 --- a/src/javascript/jsc/api/html_rewriter.zig +++ b/src/javascript/jsc/api/html_rewriter.zig @@ -304,8 +304,8 @@ pub const HTMLRewriter = struct { defer if (!is_pending) input.detach(); if (input.needsToReadFile()) { - input.doReadFileInternal(*BufferOutputSink, sink, onFinishedLoading, global); - } else if (sink.runOutputSink(input.sharedView())) |error_value| { + input.doReadFileInternal(*BufferOutputSink, sink, onFinishedLoadingWrap, global); + } else if (sink.runOutputSink(input.sharedView(), false)) |error_value| { return error_value; } @@ -316,11 +316,15 @@ pub const HTMLRewriter = struct { ); } + pub fn onFinishedLoadingWrap(sink: *anyopaque, bytes: anyerror![]u8) void { + onFinishedLoading(bun.cast(*BufferOutputSink, sink), bytes); + } + pub fn onFinishedLoading(sink: *BufferOutputSink, bytes: anyerror![]u8) void { var input = sink.input; defer input.detach(); const data = bytes catch |err| { - if (sink.response.body.value == .Locked and sink.response.body.value.Locked.task == sink) { + if (sink.response.body.value == .Locked and @ptrToInt(sink.response.body.value.Locked.task) == @ptrToInt(sink)) { sink.response.body.value = .{ .Empty = .{} }; } @@ -334,7 +338,7 @@ pub const HTMLRewriter = struct { } pub fn runOutputSink(sink: *BufferOutputSink, bytes: []const u8, is_async: bool) ?JSValue { - sink.bytes.growBy(bytes) catch unreachable; + sink.bytes.growBy(bytes.len) catch unreachable; var global = sink.global; var response = sink.response; sink.rewriter.write(bytes) catch { |