From 1ecd9f8a18da1af9f2090791b15a18ff3e68411d Mon Sep 17 00:00:00 2001 From: Ai Hoshino Date: Sat, 22 Jul 2023 13:01:26 +0800 Subject: [PATCH] handle `latin1` in `Bun__encoding__toString`. (#3739) Close: #3738 --- src/bun.js/webcore/encoding.zig | 1 + test/js/node/string_decoder/string-decoder.test.js | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/bun.js/webcore/encoding.zig b/src/bun.js/webcore/encoding.zig index 41a27ccd41..7a0188aabf 100644 --- a/src/bun.js/webcore/encoding.zig +++ b/src/bun.js/webcore/encoding.zig @@ -828,6 +828,7 @@ pub const Encoder = struct { .hex => toString(input, len, globalObject, .hex), .base64 => toString(input, len, globalObject, .base64), .base64url => toString(input, len, globalObject, .base64url), + .latin1 => toString(input, len, globalObject, .latin1), // treat everything else as utf8 else => toString(input, len, globalObject, .utf8), diff --git a/test/js/node/string_decoder/string-decoder.test.js b/test/js/node/string_decoder/string-decoder.test.js index aba73401ab..5e8463955c 100644 --- a/test/js/node/string_decoder/string-decoder.test.js +++ b/test/js/node/string_decoder/string-decoder.test.js @@ -250,3 +250,13 @@ it("invalid utf-8 input, pr #3562", () => { output += decoder.end(); expect(output).toStrictEqual("\uFFFD\uFFFD"); }); + +it("decoding latin1, issue #3738", () => { + const decoder = new RealStringDecoder("latin1"); + let output = ""; + output += decoder.write(Buffer.from("DD", "hex")); + output += decoder.write(Buffer.from("59", "hex")); + output += decoder.write(Buffer.from("DE", "hex")); + output += decoder.end(); + expect(output).toStrictEqual("ÝYÞ"); +});