Fix stack overflow when console.log'ing strings

This commit is contained in:
Jarred Sumner
2023-02-02 15:56:16 -08:00
parent 440a21eb1d
commit b12762af6c

View File

@@ -3542,13 +3542,20 @@ test "firstNonASCII16" {
}
}
fn getSharedBuffer() void {
return std.mem.asBytes(shared_temp_buffer_ptr orelse brk: {
shared_temp_buffer_ptr = bun.default_allocator.create([32 * 1024]u8) catch unreachable;
break :brk shared_temp_buffer_ptr.?;
});
}
threadlocal var shared_temp_buffer_ptr: ?*[32 * 1024]u8 = null;
pub fn formatUTF16Type(comptime Slice: type, slice_: Slice, writer: anytype) !void {
var chunk = getSharedBuffer();
var slice = slice_;
const chunk_size = 2048;
var chunk: [chunk_size + 4]u8 = undefined;
while (slice.len > 0) {
const result = strings.copyUTF16IntoUTF8(&chunk, Slice, slice);
const result = strings.copyUTF16IntoUTF8(chunk, Slice, slice);
if (result.read == 0 or result.written == 0)
break;
try writer.writeAll(chunk[0..result.written]);
@@ -3561,16 +3568,15 @@ pub fn formatUTF16(slice_: []align(1) const u16, writer: anytype) !void {
}
pub fn formatLatin1(slice_: []const u8, writer: anytype) !void {
var chunk = getSharedBuffer();
var slice = slice_;
const chunk_size = 2048;
var chunk: [chunk_size + 4]u8 = undefined;
while (strings.firstNonASCII(slice)) |i| {
if (i > 0) {
try writer.writeAll(slice[0..i]);
slice = slice[i..];
}
const result = strings.copyLatin1IntoUTF8(&chunk, @TypeOf(slice), slice[0..@min(chunk.len, slice.len)]);
const result = strings.copyLatin1IntoUTF8(chunk, @TypeOf(slice), slice[0..@min(chunk.len, slice.len)]);
if (result.read == 0 or result.written == 0)
break;
try writer.writeAll(chunk[0..result.written]);