From 543080de559d997d5ff911e8a8a1625d51f2e0bd Mon Sep 17 00:00:00 2001 From: Satya Rohith Date: Thu, 8 Apr 2021 20:06:52 +0530 Subject: fix(runtime/readFile*): close resources on error during read (#10059) This commit ensures readFile, readFileSync, readTextFile, and readTextFileSync does not leak resources on error. --- cli/tests/unit/read_file_test.ts | 18 ++++++++++++++++++ cli/tests/unit/read_text_file_test.ts | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) (limited to 'cli') diff --git a/cli/tests/unit/read_file_test.ts b/cli/tests/unit/read_file_test.ts index 5594eb4ae..5f8ee2c11 100644 --- a/cli/tests/unit/read_file_test.ts +++ b/cli/tests/unit/read_file_test.ts @@ -77,3 +77,21 @@ unitTest({ perms: { read: true } }, function readFileSyncLoop(): void { Deno.readFileSync("cli/tests/fixture.json"); } }); + +unitTest( + { perms: { read: true } }, + async function readFileDoesNotLeakResources(): Promise { + const resourcesBefore = Deno.resources(); + await assertThrowsAsync(async () => await Deno.readFile("cli")); + assertEquals(resourcesBefore, Deno.resources()); + }, +); + +unitTest( + { perms: { read: true } }, + function readFileSyncDoesNotLeakResources(): void { + const resourcesBefore = Deno.resources(); + assertThrows(() => Deno.readFileSync("cli")); + assertEquals(resourcesBefore, Deno.resources()); + }, +); diff --git a/cli/tests/unit/read_text_file_test.ts b/cli/tests/unit/read_text_file_test.ts index dc6a901bb..2223d9c18 100644 --- a/cli/tests/unit/read_text_file_test.ts +++ b/cli/tests/unit/read_text_file_test.ts @@ -69,3 +69,21 @@ unitTest({ perms: { read: true } }, function readTextFileSyncLoop(): void { Deno.readTextFileSync("cli/tests/fixture.json"); } }); + +unitTest( + { perms: { read: true } }, + async function readTextFileDoesNotLeakResources(): Promise { + const resourcesBefore = Deno.resources(); + await assertThrowsAsync(async () => await Deno.readTextFile("cli")); + assertEquals(resourcesBefore, Deno.resources()); + }, +); + +unitTest( + { perms: { read: true } }, + function readTextFileSyncDoesNotLeakResources(): void { + const resourcesBefore = Deno.resources(); + assertThrows(() => Deno.readTextFileSync("cli")); + assertEquals(resourcesBefore, Deno.resources()); + }, +); -- cgit v1.2.3