From 41fbeacee1fc9aada034091a040f78d2f97a3b3f Mon Sep 17 00:00:00 2001 From: Zack Radisic <56137411+zackradisic@users.noreply.github.com> Date: Wed, 10 Sep 2025 19:18:40 -0700 Subject: [PATCH] escape json if needed --- src/bake/DevServer/SourceMapStore.zig | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/bake/DevServer/SourceMapStore.zig b/src/bake/DevServer/SourceMapStore.zig index cfcfd00d8a..561d9d4897 100644 --- a/src/bake/DevServer/SourceMapStore.zig +++ b/src/bake/DevServer/SourceMapStore.zig @@ -210,8 +210,30 @@ pub const Entry = struct { return bun.strings.percentEncodeWrite(utf8_input, writer); } - // On the server, we don't need to do anything - try writer.appendSlice(utf8_input); + // On the server, escape special characters for JSON + var remaining = utf8_input; + while (remaining.len > 0) { + if (std.mem.indexOfAny(u8, remaining, "\"\\\n\r\t")) |index| { + // Write everything before the special character + if (index > 0) { + try writer.appendSlice(remaining[0..index]); + } + // Write the escaped character + switch (remaining[index]) { + '"' => try writer.appendSlice("\\\""), + '\\' => try writer.appendSlice("\\\\"), + '\n' => try writer.appendSlice("\\n"), + '\r' => try writer.appendSlice("\\r"), + '\t' => try writer.appendSlice("\\t"), + else => unreachable, + } + remaining = remaining[index + 1 ..]; + } else { + // No special characters found, write the rest + try writer.appendSlice(remaining); + break; + } + } } fn joinVLQ(map: *const Entry, kind: ChunkKind, j: *StringJoiner, arena: Allocator, side: bake.Side) !void {