diff options
-rw-r--r-- | src/js_lexer.zig | 2 | ||||
-rw-r--r-- | test/regression/issue/4893.test.ts | 23 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index 01852bb65..47b6fdcb9 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -642,7 +642,7 @@ fn NewLexer_( lexer.step(); // Handle Windows CRLF - if (lexer.code_point == 'r' and comptime !is_json) { + if (lexer.code_point == '\r' and comptime !is_json) { lexer.step(); if (lexer.code_point == '\n') { lexer.step(); diff --git a/test/regression/issue/4893.test.ts b/test/regression/issue/4893.test.ts new file mode 100644 index 000000000..43850693b --- /dev/null +++ b/test/regression/issue/4893.test.ts @@ -0,0 +1,23 @@ +import { bunEnv, bunExe } from "harness"; +import { mkdirSync, rmSync, writeFileSync, readFileSync, mkdtempSync } from "fs"; +import { tmpdir } from "os"; +import { join } from "path"; + +it("correctly handles CRLF multiline string in CRLF terminated files", async () => { + const testDir = mkdtempSync(join(tmpdir(), "issue4893-")); + + // Clean up from prior runs if necessary + rmSync(testDir, { recursive: true, force: true }); + + // Create a directory with our test CRLF terminated file + mkdirSync(testDir, { recursive: true }); + writeFileSync(join(testDir, "crlf.js"), '"a\\\r\nb"'); + + const { stdout, exitCode } = Bun.spawnSync({ + cmd: [bunExe(), "run", join(testDir, "crlf.js")], + env: bunEnv, + stderr: "inherit", + }); + + expect(exitCode).toBe(0); +}); |