mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
fs: translate error code properly in cpSync
UV error code needs to be negative integer so it can be mapped correctly. The filesystem error are positive integer, so we need to handle it before throwing. Co-authored-by: Jake Yuesong Li <jake.yuesong@gmail.com> PR-URL: https://github.com/nodejs/node/pull/54906 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
This commit is contained in:
parent
53ede878a5
commit
c1afd2c8e3
@ -3147,7 +3147,14 @@ static void CpSyncCheckPaths(const FunctionCallbackInfo<Value>& args) {
|
||||
? std::filesystem::symlink_status(src_path, error_code)
|
||||
: std::filesystem::status(src_path, error_code);
|
||||
if (error_code) {
|
||||
return env->ThrowUVException(EEXIST, "lstat", nullptr, src.out());
|
||||
#ifdef _WIN32
|
||||
int errorno = uv_translate_sys_error(error_code.value());
|
||||
#else
|
||||
int errorno =
|
||||
error_code.value() > 0 ? -error_code.value() : error_code.value();
|
||||
#endif
|
||||
return env->ThrowUVException(
|
||||
errorno, dereference ? "stat" : "lstat", nullptr, src.out());
|
||||
}
|
||||
auto dest_status =
|
||||
dereference ? std::filesystem::symlink_status(dest_path, error_code)
|
||||
|
@ -419,6 +419,26 @@ if (!isWindows) {
|
||||
);
|
||||
}
|
||||
|
||||
// It throws an error when attempting to copy a file with a name that is too long.
|
||||
{
|
||||
const src = 'a'.repeat(5000);
|
||||
const dest = nextdir();
|
||||
assert.throws(
|
||||
() => cpSync(src, dest),
|
||||
{ code: isWindows ? 'ENOENT' : 'ENAMETOOLONG' }
|
||||
);
|
||||
}
|
||||
|
||||
// It throws an error when attempting to copy a dir that does not exist.
|
||||
{
|
||||
const src = nextdir();
|
||||
const dest = nextdir();
|
||||
assert.throws(
|
||||
() => cpSync(src, dest, mustNotMutateObjectDeep({ recursive: true })),
|
||||
{ code: 'ENOENT' }
|
||||
);
|
||||
}
|
||||
|
||||
// It makes file writeable when updating timestamp, if not writeable.
|
||||
{
|
||||
const src = nextdir();
|
||||
|
Loading…
Reference in New Issue
Block a user