From 137e457e210e55747c1b6c894020e413805139aa Mon Sep 17 00:00:00 2001 From: William Hilton Date: Mon, 28 Oct 2019 16:58:47 -0400 Subject: [PATCH] fix(unlink): deleting symlinks should not delete file contents --- src/PromisifiedFS.js | 6 ++++-- src/__tests__/fs.promises.spec.js | 5 ++++- src/__tests__/fs.spec.js | 6 +++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/PromisifiedFS.js b/src/PromisifiedFS.js index e825908..86ad0ff 100644 --- a/src/PromisifiedFS.js +++ b/src/PromisifiedFS.js @@ -172,9 +172,11 @@ module.exports = class PromisifiedFS { } async unlink(filepath, opts) { ;[filepath, opts] = cleanParams(filepath, opts); - const stat = this._cache.stat(filepath); + const stat = this._cache.lstat(filepath); this._cache.unlink(filepath); - await this._idb.unlink(stat.ino) + if (stat.type !== 'symlink') { + await this._idb.unlink(stat.ino) + } return null } async readdir(filepath, opts) { diff --git a/src/__tests__/fs.promises.spec.js b/src/__tests__/fs.promises.spec.js index ea56457..378509a 100755 --- a/src/__tests__/fs.promises.spec.js +++ b/src/__tests__/fs.promises.spec.js @@ -346,7 +346,10 @@ describe("fs.promises module", () => { fs.readdir("/symlink/del").then(data => { expect(data.includes("file.txt")).toBe(true) expect(data.includes("file2.txt")).toBe(false) - done(); + fs.readFile("/symlink/del/file.txt", "utf8").then(data => { + expect(data).toBe("data") + done(); + }) }); }); }); diff --git a/src/__tests__/fs.spec.js b/src/__tests__/fs.spec.js index 3a400ec..c2fc076 100755 --- a/src/__tests__/fs.spec.js +++ b/src/__tests__/fs.spec.js @@ -377,7 +377,11 @@ describe("fs module", () => { expect(err).toBe(null) expect(data.includes("file.txt")).toBe(true) expect(data.includes("file2.txt")).toBe(false) - done(); + fs.readFile("/symlink/del/file.txt", "utf8", (err, data) => { + expect(err).toBe(null) + expect(data).toBe("data") + done(); + }) }); }); });