diff options
author | 2023-06-20 00:31:07 -0700 | |
---|---|---|
committer | 2023-06-20 00:31:07 -0700 | |
commit | 9f301e13c5d8f057e6e9308e23cba7ecc27dab09 (patch) | |
tree | ee8990a71359eb589ccb9bd543fa3ac9ff13ead5 /test/js | |
parent | f1b1dbf5cdbd73fc7ca9ef46892530c2cb883d37 (diff) | |
download | bun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.tar.gz bun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.tar.zst bun-9f301e13c5d8f057e6e9308e23cba7ecc27dab09.zip |
Cleanup fs.utimesSync (#3363)
* Fix UB in fs.utimesSync when passing a number with an integer greater than i32
* Fix make headers
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'test/js')
-rw-r--r-- | test/js/node/fs/fs.test.ts | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts index 999547c93..37c3253a4 100644 --- a/test/js/node/fs/fs.test.ts +++ b/test/js/node/fs/fs.test.ts @@ -1221,3 +1221,75 @@ it("existsSync with invalid path doesn't throw", () => { expect(existsSync(undefined as any)).toBe(false); expect(existsSync({ invalid: 1 } as any)).toBe(false); }); + +describe("utimesSync", () => { + it("works", () => { + const tmp = join(tmpdir(), "utimesSync-test-file-" + Math.random().toString(36).slice(2)); + writeFileSync(tmp, "test"); + const prevStats = fs.statSync(tmp); + const prevModifiedTime = prevStats.mtime; + const prevAccessTime = prevStats.atime; + + prevModifiedTime.setMilliseconds(0); + prevAccessTime.setMilliseconds(0); + + prevModifiedTime.setFullYear(1996); + prevAccessTime.setFullYear(1996); + + // Get the current time to change the timestamps + const newModifiedTime = new Date(); + const newAccessTime = new Date(); + + newModifiedTime.setMilliseconds(0); + newAccessTime.setMilliseconds(0); + + fs.utimesSync(tmp, newAccessTime, newModifiedTime); + + const newStats = fs.statSync(tmp); + + expect(newStats.mtime).toEqual(newModifiedTime); + expect(newStats.atime).toEqual(newAccessTime); + + fs.utimesSync(tmp, prevAccessTime, prevModifiedTime); + + const finalStats = fs.statSync(tmp); + + expect(finalStats.mtime).toEqual(prevModifiedTime); + expect(finalStats.atime).toEqual(prevAccessTime); + }); + + it("accepts a Number(value).toString()", () => { + const tmp = join(tmpdir(), "utimesSync-test-file2-" + Math.random().toString(36).slice(2)); + writeFileSync(tmp, "test"); + const prevStats = fs.statSync(tmp); + const prevModifiedTime = prevStats.mtime; + const prevAccessTime = prevStats.atime; + + prevModifiedTime.setMilliseconds(0); + prevAccessTime.setMilliseconds(0); + + prevModifiedTime.setFullYear(1996); + prevAccessTime.setFullYear(1996); + + // Get the current time to change the timestamps + const newModifiedTime = new Date(); + const newAccessTime = new Date(); + + newModifiedTime.setMilliseconds(0); + newAccessTime.setMilliseconds(0); + + fs.utimesSync(tmp, newAccessTime.getTime() / 1000 + "", newModifiedTime.getTime() / 1000 + ""); + + const newStats = fs.statSync(tmp); + + expect(newStats.mtime).toEqual(newModifiedTime); + expect(newStats.atime).toEqual(newAccessTime); + + fs.utimesSync(tmp, prevAccessTime.getTime() / 1000 + "", prevModifiedTime.getTime() / 1000 + ""); + + const finalStats = fs.statSync(tmp); + + expect(finalStats.mtime).toEqual(prevModifiedTime); + expect(finalStats.atime).toEqual(prevAccessTime); + }); +}); |