From d736ebff386df0506c851e80d4a5f218f9d5b43a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 15 Jan 2015 13:08:16 -0800 Subject: [PATCH] Don't deserialize buffers with inaccessible paths --- spec/project-spec.coffee | 13 +++++++++++++ src/project.coffee | 13 ++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index fd1daeb38..fed7733a3 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -50,6 +50,19 @@ describe "Project", -> deserializedProject = atom.project.testSerialization() expect(deserializedProject.getBuffers().length).toBe 0 + it "does not deserialize buffers when their path is inaccessible", -> + pathToOpen = path.join(temp.mkdirSync(), 'file.txt') + fs.writeFileSync(pathToOpen, '') + + waitsForPromise -> + atom.project.open(pathToOpen) + + runs -> + expect(atom.project.getBuffers().length).toBe 1 + fs.chmodSync(pathToOpen, '000') + deserializedProject = atom.project.testSerialization() + expect(deserializedProject.getBuffers().length).toBe 0 + describe "when an editor is saved and the project has no path", -> it "sets the project's path to the saved file's parent directory", -> tempFile = temp.openSync().path diff --git a/src/project.coffee b/src/project.coffee index b5f514fe0..ba09887df 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -67,11 +67,14 @@ class Project extends Model deserializeParams: (params) -> params.buffers = _.compact params.buffers.map (bufferState) -> - try - atom.deserializers.deserialize(bufferState) - catch error - # Ignore buffers whose previous paths are now folders - throw error unless error.code is 'EISDIR' + # Check that buffer's file path is accessible + if bufferState.filePath + try + fs.closeSync(fs.openSync(bufferState.filePath, 'r+')) + catch error + return unless error.code is 'ENOENT' + + atom.deserializers.deserialize(bufferState) params ###