From ce9e3753527166b2127920be3725bd4900f9e1e1 Mon Sep 17 00:00:00 2001 From: copy Date: Sun, 11 Jun 2017 12:02:59 -0500 Subject: [PATCH] Handle unliked files, fixes #87 --- lib/9p.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/9p.js b/lib/9p.js index 17d30bca..5984578c 100644 --- a/lib/9p.js +++ b/lib/9p.js @@ -171,7 +171,7 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) { //if (inode.status == STATUS_LOADING) return; var ret = this.fs.OpenInode(idx, mode); - this.fs.AddEvent(this.fids[fid].inodeid, + this.fs.AddEvent(this.fids[fid].inodeid, function() { message.Debug("file opened " + inode.name + " tag:"+tag); req[0] = inode.qid; @@ -312,6 +312,13 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) { var fid = req[0]; var inode = this.fs.GetInode(this.fids[fid].inodeid); message.Debug("[getattr]: fid=" + fid + " name=" + inode.name + " request mask=" + req[1]); + if(!inode || inode.status === STATUS_UNLINKED) + { + message.Debug("getattr: unlinked"); + this.SendError(tag, "No such file or directory", ENOENT); + this.SendReply(0, index); + break; + } req[0] |= 0x1000; // P9_STATS_GEN req[0] = req[1]; // request mask @@ -410,6 +417,13 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) { var inode = this.fs.GetInode(this.fids[fid].inodeid); if (id == 40) message.Debug("[treaddir]: fid=" + fid + " offset=" + offset + " count=" + count); if (id == 116) message.Debug("[read]: fid=" + fid + " (" + inode.name + ") offset=" + offset + " count=" + count + " fidtype=" + this.fids[fid].type); + if(!inode || inode.status === STATUS_UNLINKED) + { + message.Debug("read/treaddir: unlinked"); + this.SendError(tag, "No such file or directory", ENOENT); + this.SendReply(0, index); + break; + } if (this.fids[fid].type == FID_XATTR) { if (inode.caps.length < offset+count) count = inode.caps.length - offset; for(var i=0; i