mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
Fix stack overflow when console.log'ing strings
This commit is contained in:
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user