mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
fs,permission: make handling of buffers consistent
Commit 2000c267dd
added explicit handling
of Buffers to fs.symlink, but not to fs.symlinkSync or
fs.promises.symlink. This change adapts the latter two functions to
behave like fs.symlink.
Refs: https://github.com/nodejs/node/pull/49156
Refs: https://github.com/nodejs/node/pull/51212
PR-URL: https://github.com/nodejs/node/pull/52348
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
This commit is contained in:
parent
3f5ff8dc20
commit
8c0b723ccb
@ -1793,7 +1793,11 @@ function symlinkSync(target, path, type) {
|
||||
if (permission.isEnabled()) {
|
||||
// The permission model's security guarantees fall apart in the presence of
|
||||
// relative symbolic links. Thus, we have to prevent their creation.
|
||||
if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) {
|
||||
if (BufferIsBuffer(target)) {
|
||||
if (!isAbsolute(BufferToString(target))) {
|
||||
throw new ERR_ACCESS_DENIED('relative symbolic link target');
|
||||
}
|
||||
} else if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) {
|
||||
throw new ERR_ACCESS_DENIED('relative symbolic link target');
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ const {
|
||||
SymbolAsyncDispose,
|
||||
Uint8Array,
|
||||
FunctionPrototypeBind,
|
||||
uncurryThis,
|
||||
} = primordials;
|
||||
|
||||
const { fs: constants } = internalBinding('constants');
|
||||
@ -30,6 +31,8 @@ const {
|
||||
|
||||
const binding = internalBinding('fs');
|
||||
const { Buffer } = require('buffer');
|
||||
const { isBuffer: BufferIsBuffer } = Buffer;
|
||||
const BufferToString = uncurryThis(Buffer.prototype.toString);
|
||||
|
||||
const {
|
||||
codes: {
|
||||
@ -985,7 +988,11 @@ async function symlink(target, path, type_) {
|
||||
if (permission.isEnabled()) {
|
||||
// The permission model's security guarantees fall apart in the presence of
|
||||
// relative symbolic links. Thus, we have to prevent their creation.
|
||||
if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) {
|
||||
if (BufferIsBuffer(target)) {
|
||||
if (!isAbsolute(BufferToString(target))) {
|
||||
throw new ERR_ACCESS_DENIED('relative symbolic link target');
|
||||
}
|
||||
} else if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) {
|
||||
throw new ERR_ACCESS_DENIED('relative symbolic link target');
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user