diff --git a/lib/binding.js b/lib/binding.js index 2ad705e..42eef70 100644 --- a/lib/binding.js +++ b/lib/binding.js @@ -1494,7 +1494,11 @@ Binding.prototype.exists = function (filepath, callback, ctx) { if (item) { if (item instanceof SymbolicLink) { - return this.exists(item.getPath(), callback, ctx); + return this.exists( + path.resolve(path.dirname(filepath), item.getPath()), + callback, + ctx, + ); } return true; } diff --git a/test/lib/fs.link-symlink.spec.js b/test/lib/fs.link-symlink.spec.js index 4371f57..1656210 100644 --- a/test/lib/fs.link-symlink.spec.js +++ b/test/lib/fs.link-symlink.spec.js @@ -309,4 +309,10 @@ describe('fs.symlinkSync(srcpath, dstpath, [type])', function () { fs.symlinkSync('dir', 'link'); assert.isTrue(fs.statSync('link').isDirectory()); }); + + it('exists works if symlink is relative', function () { + fs.renameSync('file.txt', 'dir/file.txt'); + fs.symlinkSync('file.txt', 'dir/link.txt'); + assert.isTrue(fs.existsSync('dir/link.txt')); + }); });