diff options
author | 2023-08-10 00:45:50 +0800 | |
---|---|---|
committer | 2023-08-09 09:45:50 -0700 | |
commit | 385d440694a95bc4bfee25daa602c5c4363b6423 (patch) | |
tree | b2766ac8df676f6c22b5390a009e766f381346ce /src | |
parent | b3019270c9640a60f7a30f172cea10e310baf3b6 (diff) | |
download | bun-385d440694a95bc4bfee25daa602c5c4363b6423.tar.gz bun-385d440694a95bc4bfee25daa602c5c4363b6423.tar.zst bun-385d440694a95bc4bfee25daa602c5c4363b6423.zip |
Fix constructing buffer from a UTF16 string with the Latin1 encoding. (#4086)
Close: #3914
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/webcore/encoding.zig | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/bun.js/webcore/encoding.zig b/src/bun.js/webcore/encoding.zig index 4fa0f4ca2..9b1de838c 100644 --- a/src/bun.js/webcore/encoding.zig +++ b/src/bun.js/webcore/encoding.zig @@ -808,7 +808,8 @@ pub const Encoder = struct { .utf16le => constructFromU16(input, len, .utf16le), .ucs2 => constructFromU16(input, len, .utf16le), .utf8 => constructFromU16(input, len, .utf8), - .ascii => constructFromU16(input, len, .utf8), + .ascii => constructFromU16(input, len, .ascii), + .latin1 => constructFromU16(input, len, .latin1), else => unreachable, }; return JSC.JSValue.createBuffer(globalObject, slice, globalObject.bunVM().allocator); @@ -1170,12 +1171,7 @@ pub const Encoder = struct { }, .latin1, .buffer, .ascii => { var to = allocator.alloc(u8, len) catch return &[_]u8{}; - var input_bytes = std.mem.sliceAsBytes(input[0..len]); - @memcpy(to[0..input_bytes.len], input_bytes); - for (to[0..len], 0..) |c, i| { - to[i] = @as(u8, @as(u7, @truncate(c))); - } - + strings.copyU16IntoU8(to[0..len], []const u16, input[0..len]); return to; }, // string is already encoded, just need to copy the data |