mirror of
https://github.com/tiennm99/FBcount.git
synced 2026-05-15 12:58:32 +00:00
131 lines
3.7 KiB
JavaScript
131 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.verify = verify;
|
|
|
|
var _index = _interopRequireDefault(require("@babel/runtime/regenerator/index.js"));
|
|
|
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator.js"));
|
|
|
|
var _chmod = require("./chmod.js");
|
|
|
|
var _spawn = require("./spawn.js");
|
|
|
|
var script = `
|
|
var vm = require('vm');
|
|
var assert = require('assert');
|
|
var text = '(function () { return 42; })';
|
|
var cd, fn, result;
|
|
var modules = process.versions.modules | 0;
|
|
var v8 = process.versions.v8.split('.').slice(0, 2).join('.');
|
|
|
|
var s1 = new vm.Script(text, { filename: 's1', produceCachedData: true, sourceless: true });
|
|
assert(s1.cachedDataProduced);
|
|
cd = s1.cachedData;
|
|
|
|
var kCpuFeaturesOffset, cpuFeatures;
|
|
|
|
if (modules === 14) {
|
|
} else
|
|
if (modules === 46 || modules === 48 || modules === 51) {
|
|
kCpuFeaturesOffset = 0x0c;
|
|
} else
|
|
if (modules === 57) {
|
|
if (v8 === '6.2') {
|
|
kCpuFeaturesOffset = 0x0c;
|
|
} else
|
|
if (v8 === '5.8') {
|
|
kCpuFeaturesOffset = 0x0c;
|
|
} else {
|
|
kCpuFeaturesOffset = 0x10;
|
|
}
|
|
} else
|
|
if (modules === 59) {
|
|
kCpuFeaturesOffset = 0x0c;
|
|
} else
|
|
if (modules === 64) {
|
|
kCpuFeaturesOffset = 0x0c;
|
|
} else
|
|
if (modules === 72) {
|
|
// no cpu features anymore
|
|
} else {
|
|
assert(false, modules);
|
|
}
|
|
|
|
if (modules >= 46 && // no cpu_features field in 0.12
|
|
process.arch !== 'arm' && // non-zero features even in sourceless mode in arm
|
|
modules < 72) { // no cpu_features field in 12+
|
|
cpuFeatures = cd.readUInt32LE(kCpuFeaturesOffset);
|
|
assert(cpuFeatures === 0, 'CPU_FEATURES must be zero');
|
|
}
|
|
|
|
var s2 = new vm.Script(undefined, { filename: 's2', cachedData: cd, sourceless: true });
|
|
fn = s2.runInThisContext();
|
|
result = fn();
|
|
assert.equal(result, 42);
|
|
|
|
if (modules === 14) {
|
|
} else
|
|
if (modules === 46 || modules === 48 ||
|
|
modules === 51 || modules === 57 || modules === 59 || modules === 64) {
|
|
var paddedPayloadOffset = 0x48; // see SerializedCodeData::Payload()
|
|
var index = paddedPayloadOffset + 10;
|
|
cd[index] ^= 0xf0;
|
|
var s3 = new vm.Script(undefined, { filename: 's3', cachedData: cd, sourceless: true });
|
|
assert(s3.cachedDataRejected, 's3.cachedDataRejected must be true');
|
|
} else
|
|
if (modules === 72) {
|
|
} else {
|
|
assert(false, modules);
|
|
}
|
|
|
|
var s4 = new vm.Script(text, { filename: 's4', produceCachedData: true });
|
|
assert(s4.cachedDataProduced, 's4.cachedDataProduced must be true');
|
|
cd = s4.cachedData;
|
|
|
|
if (modules >= 46 && // no cpu_features field in 0.12
|
|
process.arch !== 'arm' && // zero features even in non-sourceless mode in arm
|
|
modules < 72) { // no cpu_features field in 12+
|
|
cpuFeatures = cd.readUInt32LE(kCpuFeaturesOffset);
|
|
assert(cpuFeatures !== 0, 'CPU_FEATURES must be non-zero');
|
|
}
|
|
|
|
console.log('ok');
|
|
`;
|
|
|
|
function verify(_x) {
|
|
return _verify.apply(this, arguments);
|
|
}
|
|
|
|
function _verify() {
|
|
_verify = (0, _asyncToGenerator2.default)(
|
|
/*#__PURE__*/
|
|
_index.default.mark(function _callee(local) {
|
|
return _index.default.wrap(function _callee$(_context) {
|
|
while (1) {
|
|
switch (_context.prev = _context.next) {
|
|
case 0:
|
|
_context.next = 2;
|
|
return (0, _chmod.plusx)(local);
|
|
|
|
case 2:
|
|
_context.next = 4;
|
|
return (0, _spawn.spawn)(local, ['-e', script], {
|
|
env: {
|
|
PKG_EXECPATH: 'PKG_INVOKE_NODEJS'
|
|
}
|
|
});
|
|
|
|
case 4:
|
|
case "end":
|
|
return _context.stop();
|
|
}
|
|
}
|
|
}, _callee);
|
|
}));
|
|
return _verify.apply(this, arguments);
|
|
} |