diff --git a/src/node_file.cc b/src/node_file.cc index 8e29bb39887625..3a51551aa184cd 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -1088,6 +1088,10 @@ constexpr bool is_uv_error_except_no_entry(int result) { return result < 0 && result != UV_ENOENT; } +constexpr bool is_uv_error_except_no_entry_dir(int result) { + return result < 0 && !(result == UV_ENOENT || result == UV_ENOTDIR); +} + static void Stat(const FunctionCallbackInfo& args) { Realm* realm = Realm::GetCurrent(args); BindingData* binding_data = realm->GetBindingData(); @@ -1121,8 +1125,11 @@ static void Stat(const FunctionCallbackInfo& args) { FS_SYNC_TRACE_BEGIN(stat); int result; if (do_not_throw_if_no_entry) { - result = SyncCallAndThrowIf( - is_uv_error_except_no_entry, env, &req_wrap_sync, uv_fs_stat, *path); + result = SyncCallAndThrowIf(is_uv_error_except_no_entry_dir, + env, + &req_wrap_sync, + uv_fs_stat, + *path); } else { result = SyncCallAndThrowOnError(env, &req_wrap_sync, uv_fs_stat, *path); } diff --git a/test/parallel/test-fs-stat.js b/test/parallel/test-fs-stat.js index b9d42b5b61bc83..cc7be77e53dadc 100644 --- a/test/parallel/test-fs-stat.js +++ b/test/parallel/test-fs-stat.js @@ -221,3 +221,8 @@ fs.lstat(__filename, undefined, common.mustCall()); }, ); } + +{ + // Test that the throwIfNoEntry option works and returns undefined + assert.ok(!(fs.statSync('./wont_exists', { throwIfNoEntry: false }))); +}