From 8dae1c84479fd401054714dad44cac09b4990cab Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sat, 11 Aug 2018 23:20:33 -0700 Subject: [PATCH] fix: make asarStatsToFsStats nherit from fs.stats (#14030) --- lib/common/asar.js | 63 +++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/lib/common/asar.js b/lib/common/asar.js index a9c7dc514ed3..e115b7a844da 100644 --- a/lib/common/asar.js +++ b/lib/common/asar.js @@ -67,47 +67,40 @@ let nextInode = 0 const uid = process.getuid != null ? process.getuid() : 0 - const gid = process.getgid != null ? process.getgid() : 0 const fakeTime = new Date() + const msec = (date) => (date || fakeTime).getTime() const asarStatsToFsStats = function (stats) { - return { - dev: 1, - ino: ++nextInode, - mode: 33188, - nlink: 1, - uid: uid, - gid: gid, - rdev: 0, - atime: stats.atime || fakeTime, - birthtime: stats.birthtime || fakeTime, - mtime: stats.mtime || fakeTime, - ctime: stats.ctime || fakeTime, - size: stats.size, - isFile: function () { - return stats.isFile - }, - isDirectory: function () { - return stats.isDirectory - }, - isSymbolicLink: function () { - return stats.isLink - }, - isBlockDevice: function () { - return false - }, - isCharacterDevice: function () { - return false - }, - isFIFO: function () { - return false - }, - isSocket: function () { - return false - } + const {Stats, constants} = require('fs') + + let mode = constants.S_IROTH ^ constants.S_IRGRP ^ constants.S_IRUSR ^ constants.S_IWUSR + + if (stats.isFile) { + mode ^= constants.S_IFREG + } else if (stats.isDirectory) { + mode ^= constants.S_IFDIR + } else if (stats.isLink) { + mode ^= constants.S_IFLNK } + + return new Stats( + 1, // dev + mode, // mode + 1, // nlink + uid, + gid, + 0, // rdev + undefined, // blksize + ++nextInode, // ino + stats.size, + undefined, // blocks, + msec(stats.atime), // atim_msec + msec(stats.mtime), // mtim_msec + msec(stats.ctime), // ctim_msec + msec(stats.birthtime) // birthtim_msec + ) } // Create a ENOENT error.