Skip to content

Commit

Permalink
fs: fix realpath inode link caching
Browse files Browse the repository at this point in the history
The `fs.realpath` / `fs.realpathSync` cache already seen symbolic links
using the inode number which may be longer that max supported
JS number (2**53) and will therefore be incorrectly handled by possibly
entering infinite loop of calling stat on the same node.

This PR changes those functions (where appropriate) to use
bigint for inode numbers.

Fixes: nodejs#33936
  • Loading branch information
lundibundi committed Jun 18, 2020
1 parent 1e4187f commit 01ff9c2
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/fs.js
Original file line number Diff line number Diff line change
Expand Up @@ -1650,7 +1650,7 @@ function realpathSync(p, options) {

const baseLong = pathModule.toNamespacedPath(base);
const ctx = { path: base };
const stats = binding.lstat(baseLong, false, undefined, ctx);
const stats = binding.lstat(baseLong, true, undefined, ctx);
handleErrorFromBinding(ctx);

if (!isFileType(stats, S_IFLNK)) {
Expand Down Expand Up @@ -1783,7 +1783,7 @@ function realpath(p, options, callback) {
return process.nextTick(LOOP);
}

return fs.lstat(base, gotStat);
return fs.lstat(base, { bigint: true }, gotStat);
}

function gotStat(err, stats) {
Expand Down

0 comments on commit 01ff9c2

Please sign in to comment.