fs: handle UV_ENOTDIR in fs.statSync
with throwIfNoEntry
provided
Fixes: https://github.com/nodejs/node/issues/56993 Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com> PR-URL: https://github.com/nodejs/node/pull/56996 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
61a57f7761
commit
409e28d5aa
@ -1088,6 +1088,10 @@ constexpr bool is_uv_error_except_no_entry(int result) {
|
|||||||
return result < 0 && result != UV_ENOENT;
|
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<Value>& args) {
|
static void Stat(const FunctionCallbackInfo<Value>& args) {
|
||||||
Realm* realm = Realm::GetCurrent(args);
|
Realm* realm = Realm::GetCurrent(args);
|
||||||
BindingData* binding_data = realm->GetBindingData<BindingData>();
|
BindingData* binding_data = realm->GetBindingData<BindingData>();
|
||||||
@ -1121,8 +1125,11 @@ static void Stat(const FunctionCallbackInfo<Value>& args) {
|
|||||||
FS_SYNC_TRACE_BEGIN(stat);
|
FS_SYNC_TRACE_BEGIN(stat);
|
||||||
int result;
|
int result;
|
||||||
if (do_not_throw_if_no_entry) {
|
if (do_not_throw_if_no_entry) {
|
||||||
result = SyncCallAndThrowIf(
|
result = SyncCallAndThrowIf(is_uv_error_except_no_entry_dir,
|
||||||
is_uv_error_except_no_entry, env, &req_wrap_sync, uv_fs_stat, *path);
|
env,
|
||||||
|
&req_wrap_sync,
|
||||||
|
uv_fs_stat,
|
||||||
|
*path);
|
||||||
} else {
|
} else {
|
||||||
result = SyncCallAndThrowOnError(env, &req_wrap_sync, uv_fs_stat, *path);
|
result = SyncCallAndThrowOnError(env, &req_wrap_sync, uv_fs_stat, *path);
|
||||||
}
|
}
|
||||||
|
@ -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 })));
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user