diff --git a/src/string_immutable.zig b/src/string_immutable.zig index a437baa69e..e949892e17 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -1419,7 +1419,7 @@ pub fn convertUTF8BytesIntoUTF16(sequence: *const [4]u8) UTF16Replacement { switch (len) { 2 => { if (Environment.allow_assert) - assert(sequence[0] >= 0xC2); + assert(sequence[0] >= 0xC0); if (Environment.allow_assert) assert(sequence[0] <= 0xDF); if (sequence[1] < 0x80 or sequence[1] > 0xBF) { diff --git a/test/bun.js/buffer.test.js b/test/bun.js/buffer.test.js index 1971fed8c6..d1ed5a496a 100644 --- a/test/bun.js/buffer.test.js +++ b/test/bun.js/buffer.test.js @@ -2813,3 +2813,11 @@ test("Buffer.byteLength", () => { ); } }); + +it("should not crash on invalid UTF-8 byte sequence", () => { + const buf = Buffer.from([0xC0, 0xFD]).toString(); + expect(buf.length).toBe(2); + const str = buf.toString(); + expect(str.length).toBe(2); + expect(str).toBe("\uFFFD\uFFFD"); +});