Description
- Version: 6
- Platform: Tested on Darwin and Linux
- Subsystem: fs
Previously, looping symbolic links and long path names were handled by fs.realpath without issue. The changelog says that fs.realpath "can throw new errors", but fails to identify that it also is less powerful (and also does not identify what those new errors are).
Seems like it'd be possible to maintain backwards compatibility if Node could fall back to the slower but more resilient implementation when ELOOP
or ENAMETOOLONG
are raised.
If this is not desirable, then the changelog should be updated to reflect the reduction in functionality.
I have no strong opinion about whether or not Node is capable of resolving the realpath of long looping symbolic links, but I would very much like a thing to point to when people complain about glob being broken. Thanks.
$ node -v
v5.3.0
$ cat rp.js
var fs = require('fs')
var l = 128
var long = 'rptest/' + Array(l).join('a/b/') + 'a'
clean()
process.on('exit', clean)
function clean () {
try { fs.unlinkSync('rptest/a/b') } catch (e) {}
try { fs.rmdirSync('rptest/a') } catch (e) {}
try { fs.rmdirSync('rptest') } catch (e) {}
}
fs.mkdirSync('rptest')
fs.mkdirSync('rptest/a')
fs.symlinkSync('..', 'rptest/a/b')
console.log(fs.realpathSync(long))
fs.realpath(long, console.log)
$ node rp.js
/home/isaacs/rptest/a
null '/home/isaacs/rptest/a'
$ nave use 6
$ node rp.js
fs.js:1568
return binding.realpath(pathModule._makeLong(path), options.encoding);
^
Error: ELOOP: too many symbolic links encountered, realpath 'rptest/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a/b/a'
at Error (native)
at Object.realpathSync (fs.js:1568:18)
at Object.<anonymous> (/home/isaacs/rp.js:19:16)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Function.Module.runMain (module.js:575:10)
at startup (node.js:160:18)