aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-02-02 15:56:16 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-02-02 15:56:16 -0800
commitb12762af6c0fa3576733ca5e4d8ef8e69a1848cd (patch)
tree6766427cf33647988547c619d20983d3074a6555 /src
parent440a21eb1d4d75eb23f2d53ed665fec44e7eab8e (diff)
downloadbun-b12762af6c0fa3576733ca5e4d8ef8e69a1848cd.tar.gz
bun-b12762af6c0fa3576733ca5e4d8ef8e69a1848cd.tar.zst
bun-b12762af6c0fa3576733ca5e4d8ef8e69a1848cd.zip
Fix stack overflow when console.log'ing strings
Diffstat (limited to 'src')
-rw-r--r--src/string_immutable.zig18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index cf6f6126c..b09d6bd2d 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -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]);