summaryrefslogtreecommitdiff
path: root/lib/vm.js
diff options
context:
space:
mode:
authorGus Caplan <me@gus.host>2018-02-26 14:29:41 -0600
committerGus Caplan <me@gus.host>2018-03-12 14:39:21 -0500
commitcb5f358ee7461f191db8c88e0af26023558f5232 (patch)
treef23e34d68a09fb05d044f00bd795575db63a9370 /lib/vm.js
parenta03c90b661f69200f124718b56b55b0cb3506c71 (diff)
downloadandroid-node-v8-cb5f358ee7461f191db8c88e0af26023558f5232.tar.gz
android-node-v8-cb5f358ee7461f191db8c88e0af26023558f5232.tar.bz2
android-node-v8-cb5f358ee7461f191db8c88e0af26023558f5232.zip
vm: add code generation options
Adds options to a VM Context to disable code generation from strings (such as eval or new Function) and WASM code generation (WebAssembly.compile). PR-URL: https://github.com/nodejs/node/pull/19016 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Diffstat (limited to 'lib/vm.js')
-rw-r--r--lib/vm.js37
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/vm.js b/lib/vm.js
index 554aff8bfc..5266dbd29f 100644
--- a/lib/vm.js
+++ b/lib/vm.js
@@ -84,14 +84,36 @@ function validateString(prop, propName) {
throw new ERR_INVALID_ARG_TYPE(propName, 'string', prop);
}
+function validateBool(prop, propName) {
+ if (prop !== undefined && typeof prop !== 'boolean')
+ throw new ERR_INVALID_ARG_TYPE(propName, 'boolean', prop);
+}
+
+function validateObject(prop, propName) {
+ if (prop !== undefined && (typeof prop !== 'object' || prop === null))
+ throw new ERR_INVALID_ARG_TYPE(propName, 'Object', prop);
+}
+
function getContextOptions(options) {
if (options) {
+ validateObject(options.contextCodeGeneration,
+ 'options.contextCodeGeneration');
const contextOptions = {
name: options.contextName,
- origin: options.contextOrigin
+ origin: options.contextOrigin,
+ codeGeneration: typeof options.contextCodeGeneration === 'object' ? {
+ strings: options.contextCodeGeneration.strings,
+ wasm: options.contextCodeGeneration.wasm,
+ } : undefined,
};
validateString(contextOptions.name, 'options.contextName');
validateString(contextOptions.origin, 'options.contextOrigin');
+ if (contextOptions.codeGeneration) {
+ validateBool(contextOptions.codeGeneration.strings,
+ 'options.contextCodeGeneration.strings');
+ validateBool(contextOptions.codeGeneration.wasm,
+ 'options.contextCodeGeneration.wasm');
+ }
return contextOptions;
}
return {};
@@ -109,10 +131,21 @@ function createContext(sandbox, options) {
if (typeof options !== 'object' || options === null) {
throw new ERR_INVALID_ARG_TYPE('options', 'object', options);
}
+ validateObject(options.codeGeneration, 'options.codeGeneration');
options = {
name: options.name,
- origin: options.origin
+ origin: options.origin,
+ codeGeneration: typeof options.codeGeneration === 'object' ? {
+ strings: options.codeGeneration.strings,
+ wasm: options.codeGeneration.wasm,
+ } : undefined,
};
+ if (options.codeGeneration !== undefined) {
+ validateBool(options.codeGeneration.strings,
+ 'options.codeGeneration.strings');
+ validateBool(options.codeGeneration.wasm,
+ 'options.codeGeneration.wasm');
+ }
if (options.name === undefined) {
options.name = `VM Context ${defaultContextNameIndex++}`;
} else if (typeof options.name !== 'string') {