| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -40,6 +40,7 @@ const { | |||
| 40 | 40 | StringPrototypeCharCodeAt, | |
| 41 | 41 | StringPrototypeIndexOf, | |
| 42 | 42 | StringPrototypeSlice, | |
| 43 | + uncurryThis, | ||
| 43 | 44 | } = primordials; | |
| 44 | 45 | ||
| 45 | 46 | const { fs: constants } = internalBinding('constants'); | |
@@ -66,6 +67,8 @@ const binding = internalBinding('fs'); | |||
| 66 | 67 | const { createBlobFromFilePath } = require('internal/blob'); | |
| 67 | 68 | ||
| 68 | 69 | const { Buffer } = require('buffer'); | |
| 70 | + const { isBuffer: BufferIsBuffer } = Buffer; | ||
| 71 | + const BufferToString = uncurryThis(Buffer.prototype.toString); | ||
| 69 | 72 | const { | |
| 70 | 73 | aggregateTwoErrors, | |
| 71 | 74 | codes: { | |
@@ -1721,7 +1724,12 @@ function symlink(target, path, type_, callback_) { | |||
| 1721 | 1724 | if (permission.isEnabled()) { | |
| 1722 | 1725 | // The permission model's security guarantees fall apart in the presence of | |
| 1723 | 1726 | // relative symbolic links. Thus, we have to prevent their creation. | |
| 1724 | - if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) { | ||
| 1727 | + if (BufferIsBuffer(target)) { | ||
| 1728 | + if (!isAbsolute(BufferToString(target))) { | ||
| 1729 | + callback(new ERR_ACCESS_DENIED('relative symbolic link target')); | ||
| 1730 | + return; | ||
| 1731 | + } | ||
| 1732 | + } else if (typeof target !== 'string' || !isAbsolute(toPathIfFileURL(target))) { | ||
| 1725 | 1733 | callback(new ERR_ACCESS_DENIED('relative symbolic link target')); | |
| 1726 | 1734 | return; | |
| 1727 | 1735 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,6 +5,7 @@ const common = require('../common'); | |||
| 5 | 5 | common.skipIfWorker(); | |
| 6 | 6 | ||
| 7 | 7 | const assert = require('assert'); | |
| 8 | + const path = require('path'); | ||
| 8 | 9 | const { symlinkSync, symlink, promises: { symlink: symlinkAsync } } = require('fs'); | |
| 9 | 10 | ||
| 10 | 11 | const error = { | |
@@ -25,3 +26,16 @@ for (const targetString of ['a', './b/c', '../d', 'e/../f', 'C:drive-relative', | |||
| 25 | 26 | } | |
| 26 | 27 | } | |
| 27 | 28 | } | |
| 29 | + | ||
| 30 | + // Absolute should not throw | ||
| 31 | + for (const targetString of [path.resolve('.')]) { | ||
| 32 | + for (const target of [targetString, Buffer.from(targetString)]) { | ||
| 33 | + for (const path of [__filename]) { | ||
| 34 | + symlink(target, path, common.mustCall((err) => { | ||
| 35 | + assert(err); | ||
| 36 | + assert.strictEqual(err.code, 'EEXIST'); | ||
| 37 | + assert.match(err.message, /file already exists/); | ||
| 38 | + })); | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments