diff options
author | Gus Caplan <me@gus.host> | 2018-02-26 14:29:41 -0600 |
---|---|---|
committer | Gus Caplan <me@gus.host> | 2018-03-12 14:39:21 -0500 |
commit | cb5f358ee7461f191db8c88e0af26023558f5232 (patch) | |
tree | f23e34d68a09fb05d044f00bd795575db63a9370 /lib/vm.js | |
parent | a03c90b661f69200f124718b56b55b0cb3506c71 (diff) | |
download | android-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.js | 37 |
1 files changed, 35 insertions, 2 deletions
@@ -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') { |