kopia lustrzana https://github.com/c9/core
Merge pull request +9997 from c9/revert-9979-revert-symlink-loop-detection
Restore "fix symlink loop detection"pull/223/head
commit
d7be50c642
|
@ -350,7 +350,7 @@ module.exports = function setup(fsOptions) {
|
|||
|
||||
// This helper function doesn't follow node conventions in the callback,
|
||||
// there is no err, only entry.
|
||||
function createStatEntry(file, fullpath, callback) {
|
||||
function createStatEntry(file, fullpath, callback, _loop) {
|
||||
fs.lstat(fullpath, function (err, stat) {
|
||||
var entry = {
|
||||
name: file
|
||||
|
@ -378,26 +378,29 @@ module.exports = function setup(fsOptions) {
|
|||
return callback(entry);
|
||||
}
|
||||
fs.readlink(fullpath, function (err, link) {
|
||||
if (entry.name == link) {
|
||||
entry.linkStatErr = "ELOOP: recursive symlink";
|
||||
return callback(entry);
|
||||
}
|
||||
|
||||
if (err) {
|
||||
entry.linkErr = err.stack;
|
||||
return callback(entry);
|
||||
}
|
||||
var fullLinkPath = pathResolve(dirname(fullpath), link);
|
||||
if (!_loop) {
|
||||
_loop = {fullLinkPath: fullpath, max: 100};
|
||||
}
|
||||
if (fullLinkPath.toLowerCase() == _loop.fullLinkPath.toLowerCase() || _loop.max --< 0) {
|
||||
entry.linkErr = "ELOOP: recursive symlink";
|
||||
return callback(entry);
|
||||
}
|
||||
entry.link = link;
|
||||
resolvePath(pathResolve(dirname(fullpath), link), {alreadyRooted: true}, function (err, newpath) {
|
||||
if (err) {
|
||||
entry.linkStatErr = err;
|
||||
return callback(entry);
|
||||
}
|
||||
createStatEntry(basename(newpath), newpath, function (linkStat) {
|
||||
entry.linkStat = linkStat;
|
||||
linkStat.fullPath = newpath.substr(base.length) || "/";
|
||||
return callback(entry);
|
||||
});
|
||||
resolvePath(fullLinkPath, {alreadyRooted: true}, function (err, newpath) {
|
||||
if (err) {
|
||||
entry.linkErr = err;
|
||||
return callback(entry);
|
||||
}
|
||||
createStatEntry(basename(newpath), newpath, function (linkStat) {
|
||||
entry.linkStat = linkStat;
|
||||
linkStat.fullPath = newpath.substr(base.length) || "/";
|
||||
return callback(entry);
|
||||
}, _loop);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -561,8 +561,8 @@ define(function(require, exports, module) {
|
|||
node.size = stat.size;
|
||||
if (stat.mtime != undefined)
|
||||
node.mtime = stat.mtime;
|
||||
if (original_stat)
|
||||
node.link = stat.fullPath;
|
||||
if (original_stat || stat.linkErr)
|
||||
node.link = stat.fullPath || stat.linkErr;
|
||||
node.isFolder = isFolder;
|
||||
}
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue