mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
fs: adjust typecheck for type
in fs.symlink()
Throws `TypeError` instead of `Error` Enables autodetection on Windows if `type === undefined` Explicitly disallows unknown strings and non-string values PR-URL: https://github.com/nodejs/node/pull/49741 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
This commit is contained in:
parent
75884678d7
commit
f202322ea4
7 changed files with 56 additions and 43 deletions
21
lib/fs.js
21
lib/fs.js
|
@ -142,6 +142,7 @@ const {
|
|||
validateFunction,
|
||||
validateInteger,
|
||||
validateObject,
|
||||
validateOneOf,
|
||||
validateString,
|
||||
kValidateObjectAllowNullable,
|
||||
} = require('internal/validators');
|
||||
|
@ -1715,13 +1716,17 @@ function readlinkSync(path, options) {
|
|||
* Creates the link called `path` pointing to `target`.
|
||||
* @param {string | Buffer | URL} target
|
||||
* @param {string | Buffer | URL} path
|
||||
* @param {string | null} [type_]
|
||||
* @param {(err?: Error) => any} callback_
|
||||
* @param {string | null} [type]
|
||||
* @param {(err?: Error) => any} callback
|
||||
* @returns {void}
|
||||
*/
|
||||
function symlink(target, path, type_, callback_) {
|
||||
const type = (typeof type_ === 'string' ? type_ : null);
|
||||
const callback = makeCallback(arguments[arguments.length - 1]);
|
||||
function symlink(target, path, type, callback) {
|
||||
if (callback === undefined) {
|
||||
callback = makeCallback(type);
|
||||
type = undefined;
|
||||
} else {
|
||||
validateOneOf(type, 'type', ['dir', 'file', 'junction', null, undefined]);
|
||||
}
|
||||
|
||||
if (permission.isEnabled()) {
|
||||
// The permission model's security guarantees fall apart in the presence of
|
||||
|
@ -1740,7 +1745,7 @@ function symlink(target, path, type_, callback_) {
|
|||
target = getValidatedPath(target, 'target');
|
||||
path = getValidatedPath(path);
|
||||
|
||||
if (isWindows && type === null) {
|
||||
if (isWindows && type == null) {
|
||||
let absoluteTarget;
|
||||
try {
|
||||
// Symlinks targets can be relative to the newly created path.
|
||||
|
@ -1786,8 +1791,8 @@ function symlink(target, path, type_, callback_) {
|
|||
* @returns {void}
|
||||
*/
|
||||
function symlinkSync(target, path, type) {
|
||||
type = (typeof type === 'string' ? type : null);
|
||||
if (isWindows && type === null) {
|
||||
validateOneOf(type, 'type', ['dir', 'file', 'junction', null, undefined]);
|
||||
if (isWindows && type == null) {
|
||||
const absoluteTarget = pathModule.resolve(`${path}`, '..', `${target}`);
|
||||
if (statSync(absoluteTarget, { throwIfNoEntry: false })?.isDirectory()) {
|
||||
type = 'dir';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue