From 46eb4ed2b96c235e10e15645a30d2f192a1af0de Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 24 Jun 2024 11:23:29 +0100 Subject: [PATCH] fix: Throw an error when readdir is called on a non-directory --- packages/backend/src/api/APIError.js | 4 ++++ packages/backend/src/filesystem/hl_operations/hl_readdir.js | 2 +- packages/puter-js-common/src/PosixError.js | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/api/APIError.js b/packages/backend/src/api/APIError.js index c546f4568..736d76217 100644 --- a/packages/backend/src/api/APIError.js +++ b/packages/backend/src/api/APIError.js @@ -236,6 +236,10 @@ module.exports = class APIError { status: 422, message: 'Directory is not empty.', }, + 'readdir_of_non_directory': { + status: 422, + message: 'Readdir target must be a directory.', + }, // Write 'offset_without_existing_file': { diff --git a/packages/backend/src/filesystem/hl_operations/hl_readdir.js b/packages/backend/src/filesystem/hl_operations/hl_readdir.js index cad743e28..1c4dd19a1 100644 --- a/packages/backend/src/filesystem/hl_operations/hl_readdir.js +++ b/packages/backend/src/filesystem/hl_operations/hl_readdir.js @@ -38,7 +38,7 @@ class HLReadDir extends HLFilesystemOperation { if ( ! await svc_acl.check(actor, subject, 'see') ) { throw await svc_acl.get_safe_acl_error(actor, subject, 'see'); } - return [await subject.getSafeEntry()]; + throw APIError.create('readdir_of_non_directory'); } let children; diff --git a/packages/puter-js-common/src/PosixError.js b/packages/puter-js-common/src/PosixError.js index 7b94d837b..06159998d 100644 --- a/packages/puter-js-common/src/PosixError.js +++ b/packages/puter-js-common/src/PosixError.js @@ -156,6 +156,7 @@ class PosixError extends Error { case 'missing_expected_metadata': return new PosixError(ErrorCodes.EINVAL, e.message); case 'overwrite_and_dedupe_exclusive': return new PosixError(ErrorCodes.EINVAL, e.message); case 'not_empty': return new PosixError(ErrorCodes.ENOTEMPTY, e.message); + case 'readdir_of_non_directory': return new PosixError(ErrorCodes.ENOTDIR, e.message); // Write case 'offset_without_existing_file': return new PosixError(ErrorCodes.ENOENT, e.message);