diff options
author | 2023-08-21 03:31:33 -0700 | |
---|---|---|
committer | 2023-08-21 03:31:33 -0700 | |
commit | 1b8f5697929812d4c7abd0edff8ad1e8f12b4e14 (patch) | |
tree | bed94f76f06f42e1c8c28bc2f4b4133a67f4d9b9 | |
parent | 183b818462663cbd4828a92733975eb0a831bb39 (diff) | |
download | bun-1b8f5697929812d4c7abd0edff8ad1e8f12b4e14.tar.gz bun-1b8f5697929812d4c7abd0edff8ad1e8f12b4e14.tar.zst bun-1b8f5697929812d4c7abd0edff8ad1e8f12b4e14.zip |
Fix memory leak in `buffer.toString("hex")` (#4235)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
-rw-r--r-- | src/bun.js/webcore/encoding.zig | 6 | ||||
-rw-r--r-- | src/js_ast.zig | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/bun.js/webcore/encoding.zig b/src/bun.js/webcore/encoding.zig index 32efb3168..890dad7bd 100644 --- a/src/bun.js/webcore/encoding.zig +++ b/src/bun.js/webcore/encoding.zig @@ -866,12 +866,14 @@ pub const Encoder = struct { } var str = bun.String.createUninitialized(.latin1, len) orelse return ZigString.init("Out of memory").toErrorInstance(global); + defer str.deref(); + strings.copyLatin1IntoASCII(@constCast(str.latin1()), input); return str.toJS(global); }, .latin1 => { var str = bun.String.createUninitialized(.latin1, len) orelse return ZigString.init("Out of memory").toErrorInstance(global); - + defer str.deref(); @memcpy(@constCast(str.latin1()), input_ptr[0..len]); return str.toJS(global); @@ -901,6 +903,8 @@ pub const Encoder = struct { .hex => { var str = bun.String.createUninitialized(.latin1, len * 2) orelse return ZigString.init("Out of memory").toErrorInstance(global); + defer str.deref(); + var output = @constCast(str.latin1()); const wrote = strings.encodeBytesToHex(output, input); std.debug.assert(wrote == output.len); diff --git a/src/js_ast.zig b/src/js_ast.zig index 6c946b9d1..aeccdd1f3 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -2374,6 +2374,7 @@ pub const E = struct { if (s.is_utf16) { var out = bun.String.createUninitializedUTF16(s.len()); + defer out.deref(); @memcpy(@constCast(out.utf16()), s.slice16()); return out.toJS(globalObject); } |