Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
process.addListener("unhandledRejection", listener);
});
// clearTimeout
clearTimeout(timeoutId);
};
process.on("uncaughtException", uncaughtException);
process.on("unhandledRejection", unhandledRejection as any);
const poweredCode = convertCode(code, {
assertAfterCallbackName: postCallbackName,
filePath: filePath
});
// total count of assert
const totalAssertionCount = poweredCode.split(CALLBACK_FUNCTION_NAME).length - 1;
// current count of assert
let countOfExecutedAssertion = 0;
const vm = new NodeVM({
console: options.console ? "inherit" : "off",
timeout: timeout,
sandbox: {
[postCallbackName]: (_id: string) => {
countOfExecutedAssertion++;
if (runMode === "all" && countOfExecutedAssertion === totalAssertionCount) {
// when all finish
restoreListener();
resolve();
} else if (runMode === "any") {
// when anyone finish
restoreListener();
resolve();
}
},
// User defined context
// See https://github.com/nodejs/node/issues/8071#issuecomment-240259088
// It will prevent console.log from calling the "inspect" property,
// which can be kinda messy with Proxies
require("util").inspect.defaultOptions.customInspect = false;
if (argv["dangerous-vm"]) {
lib.verbose("Analyzing with native vm module (dangerous!)");
const vm = require("vm");
vm.runInNewContext(code, sandbox, {
displayErrors: true,
// lineOffset: -fs.readFileSync(path.join(__dirname, "patch.js"), "utf8").split("\n").length,
filename: "sample.js",
});
} else {
lib.debug("Analyzing with vm2 v" + require("vm2/package.json").version);
const vm = new VM({
timeout: (argv.timeout || 10) * 1000,
sandbox,
});
vm.run(code);
}
function ActiveXObject(name) {
lib.verbose(`New ActiveXObject: ${name}`);
name = name.toLowerCase();
if (name.match("xmlhttp") || name.match("winhttprequest"))
return require("./emulator/XMLHTTP");
if (name.match("dom")) {
return {
createElement: require("./emulator/DOM"),
url: details.url,
method: details.method,
frameId: 0,
parentFrameId: -1,
tabId: details.webContentsId,
type: details.resourceType,
timeStamp: details.timestamp
}
const lambdaScript = `
(function(request) {
${this._blockingOnBeforeRequestScript.js}
})(${JSON.stringify(request)})
`
// Run our guest code
const vm = new VM()
let modifier
try {
modifier = vm.run(lambdaScript)
} catch (ex) {
this._blockingOnBeforeRequestErrorSuppress.total++
if (new Date().getTime() - this._blockingOnBeforeRequestErrorSuppress.last > BLOCKING_ON_BEFORE_REQUEST_ERROR_SUPPRESS_MS) {
this._blockingOnBeforeRequestErrorSuppress.last = new Date().getTime()
console.error([
`Extension Error: Failed to execute blocking onBeforeRequest for extension`,
` Extension ID: ${this.extension.id}`,
` Subsequent errors will not be reported for another ${BLOCKING_ON_BEFORE_REQUEST_ERROR_SUPPRESS_MS}ms`,
` Total Errorred runs: ${this._blockingOnBeforeRequestErrorSuppress.total}`,
` Below is a log of the failed code:`,
' ---------------',
'',
lambdaScript,
const options = {
console: 'inherit',
sandbox,
require: {
external: false,
builtin: [] as string[],
root: './',
}
};
if (process.env.NODE_FUNCTION_ALLOW_BUILTIN) {
options.require.builtin = process.env.NODE_FUNCTION_ALLOW_BUILTIN.split(',');
}
const vm = new NodeVM(options);
// Get the code to execute
const functionCode = this.getNodeParameter('functionCode') as string;
let jsonData: IDataObject;
try {
// Execute the function code
jsonData = await vm.run(`module.exports = async function() {${functionCode}}()`);
} catch (e) {
return Promise.reject(e);
}
// Do very basic validation of the data
if (jsonData === undefined) {
throw new Error('No data got returned. Always an object has to be returned!');
// handle.cssFile = path.resolve(frameName, "..", name);
// wxAppCode[name]();
// }
let wxAppCode = {};
let handle = {cssFile: name};
let gg = new GwxCfg();
let tsandbox = {
$gwx: GwxCfg.prototype["$gwx"],
__mainPageFrameReady__: GwxCfg.prototype["$gwx"], //解决 $gwx is not defined
__vd_version_info__: GwxCfg.prototype["$gwx"], //解决 __vd_version_info__ is not defined
__wxAppCode__: wxAppCode,
setCssToHead: cssRebuild.bind(handle)
}
let vm = new VM({sandbox: tsandbox});
vm.run(code);
for (let name in wxAppCode) {
if (name.endsWith(".wxss")) {
handle.cssFile = path.resolve(frameName, "..", name);
wxAppCode[name]();
}
}
}
function preRun(dir,frameFile,mainCode,files,cb){
export function compile(query: string, projectDir?: string): string {
let compiledQuery = query;
if (projectDir) {
const vm = new NodeVM({
wrapper: "none",
require: {
context: "sandbox",
root: projectDir,
external: true
},
sourceExtensions: ["js", "sql"],
compiler: (code, path) => compiler(code, path)
});
// This use of genIndex needs some rethinking. It uses the version built into
// @dataform/api instead of @dataform/core, which would be more correct, as done in compile.ts.
// Possibly query compilation as a whole needs a redesign.
const indexScript = indexFileGenerator(
createGenIndexConfig(
{ projectDir },
`(function() {
run: (code, { filename, mainFilename, mainSource } = {}) => {
const script = new VMScript(code, filename)
const prefix = errorPrefix != null ? errorPrefix : 'Error ocurred.'
// NOTE: if we need to upgrade vm2 we will need to check the source of this function
// in vm2 repo and see if we need to change this,
// we needed to override this method because we want "displayErrors" to be true in order
// to show nice error when the compile of a script fails
script.compile = function compile () {
if (this._compiled) return this
this._compiled = new originalVM.Script(this.code, {
filename: this.filename,
displayErrors: true
})
return this
}
this.serverAddress = config.serverAddress || '0.0.0.0'
this.serverPort = parseInt(config.serverPort)
this.responseDelay = parseInt(config.responseDelay)
this.delayUnit = config.delayUnit
this.unitId = config.unitId
this.minAddress = config.minAddress
this.splitAddress = config.splitAddress
this.showErrors = config.showErrors
this.funcGetCoil = new VMScript(config.funcGetCoil).compile()
this.funcGetDiscreteInput = new VMScript(config.funcGetDiscreteInput).compile()
this.funcGetInputRegister = new VMScript(config.funcGetInputRegister).compile()
this.funcGetHoldingRegister = new VMScript(config.funcGetHoldingRegister).compile()
this.funcSetCoil = new VMScript(config.funcSetCoil).compile()
this.funcSetRegister = new VMScript(config.funcSetRegister).compile()
let node = this
node.bufferFactor = 8
node.coilsBufferSize = parseInt(config.coilsBufferSize * node.bufferFactor)
node.registersBufferSize = parseInt(config.registersBufferSize * node.bufferFactor)
node.coils = Buffer.alloc(node.coilsBufferSize, 0)
node.registers = Buffer.alloc(node.registersBufferSize, 0)
node.modbusServer = null
mbBasics.setNodeStatusTo('initialized', node)
// 1...10000* address - 1 Coils (outputs) 0 Read/Write
// 10001...20000* address - 10001 Discrete Inputs 01 Read
await actions[api.action](api.payload);
done(null);
}
} catch (error) {
done(error);
}
}
execute();
`;
// the code of the smart contarct comes as a Base64 encoded string
codeTemplate = codeTemplate.replace('###ACTIONS###', Base64.decode(code));
// compile the code for faster executions later on
const script = new VMScript(codeTemplate).compile();
const tables = {};
// prepare the db object that will be available in the VM
const db = {
// createTable is only available during the smart contract deployment
createTable: (tableName, indexes = []) => SmartContracts.createTable(
ipc, tables, name, tableName, indexes,
),
// perform a query find on a table of the smart contract
find: (table, query, limit = 1000, offset = 0, indexes = []) => SmartContracts.find(
ipc, name, table, query, limit, offset, indexes,
),
// perform a query find on a table of an other smart contract
findInTable: (contractName, table, query, limit = 1000, offset = 0, index = '', descending = false) => SmartContracts.find(
ipc, contractName, table, query, limit, offset, index, descending,
function getInjectedAPP_CONFIG(body: string) {
const $ = load(body);
const scriptContent = $("script#app-config").html();
const vm = new VM({ sandbox: { window: {} } });
vm.run(scriptContent!);
return vm.run("window.APP_CONFIG");
}