From 8c9d1ba1d719c97daabe1adf77e30f746b4edf44 Mon Sep 17 00:00:00 2001 From: Marvin Hagemeister Date: Tue, 28 May 2024 14:30:31 +0200 Subject: fix(ext/node/fs): `position` argument not applied (#24009) We didn't honour the `position` options of `fd.read` and `fd.write` because we checked if the buffer is of type `Buffer` instead of just `Uint8Array`. Node does the latter. In doing so I noticed that the file handle id was written to a public property which it definitely shouldn't be. This was probably a typo. Fixes https://github.com/denoland/deno/issues/23707 --- tests/unit_node/_fs/_fs_write_test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/unit_node/_fs/_fs_write_test.ts') diff --git a/tests/unit_node/_fs/_fs_write_test.ts b/tests/unit_node/_fs/_fs_write_test.ts index 43bc7a10e..148bc40e7 100644 --- a/tests/unit_node/_fs/_fs_write_test.ts +++ b/tests/unit_node/_fs/_fs_write_test.ts @@ -49,3 +49,27 @@ Deno.test({ assertEquals(decoder.decode(data), "hello"); }, }); + +Deno.test({ + name: "Data is padded if position > length", + async fn() { + const tempFile: string = Deno.makeTempFileSync(); + + using file = await Deno.open(tempFile, { + create: true, + write: true, + read: true, + }); + + const str = "hello world"; + const buffer = Buffer.from(str); + const bytesWritten = writeSync(file.rid, buffer, 0, str.length, 4); + + const data = Deno.readFileSync(tempFile); + Deno.removeSync(tempFile); + + assertEquals(bytesWritten, str.length); + // Check if result is padded + assertEquals(decoder.decode(data), "\x00\x00\x00\x00hello world"); + }, +}); -- cgit v1.2.3