{"version":3,"file":"realm-shim.js","sources":["../src/utilities.js","../src/realmFacade.js","../src/commons.js","../src/stdlib.js","../src/repair/accessors.js","../src/repair/functions.js","../src/unsafeRec.js","../src/optimizer.js","../src/scopeHandler.js","../src/sourceParser.js","../src/evaluators.js","../src/realm.js"],"sourcesContent":["// we'd like to abandon, but we can't, so just scream and break a lot of\n// stuff. However, since we aren't really aborting the process, be careful to\n// not throw an Error object which could be captured by child-Realm code and\n// used to access the (too-powerful) primal-realm Error object.\n\nexport function throwTantrum(s, err = undefined) {\n const msg = `please report internal shim error: ${s}`;\n\n // we want to log these 'should never happen' things.\n // eslint-disable-next-line no-console\n console.error(msg);\n if (err) {\n // eslint-disable-next-line no-console\n console.error(`${err}`);\n // eslint-disable-next-line no-console\n console.error(`${err.stack}`);\n }\n\n // eslint-disable-next-line no-debugger\n debugger;\n throw msg;\n}\n\nexport function assert(condition, message) {\n if (!condition) {\n throwTantrum(message);\n }\n}\n\n// Remove code modifications.\nexport function cleanupSource(src) {\n /* START_TESTS_ONLY */\n\n // Restore eval which is modified by esm module.\n src = src.replace(/\\(0,[^)]+\\)/g, '(0, eval)');\n\n // Remove code coverage which is injected by nyc module.\n src = src.replace(/cov_[^+]+\\+\\+[;,]/g, '');\n\n /* END_TESTS_ONLY */\n return src;\n}\n","import { cleanupSource } from './utilities';\n\n// buildChildRealm is immediately turned into a string, and this function is\n// never referenced again, because it closes over the wrong intrinsics\n\nexport function buildChildRealm(unsafeRec, BaseRealm) {\n const { initRootRealm, initCompartment, getRealmGlobal, realmEvaluate } = BaseRealm;\n\n // This Object and Reflect are brand new, from a new unsafeRec, so no user\n // code has been run or had a chance to manipulate them. We extract these\n // properties for brevity, not for security. Don't ever run this function\n // *after* user code has had a chance to pollute its environment, or it\n // could be used to gain access to BaseRealm and primal-realm Error\n // objects.\n const { create, defineProperties } = Object;\n\n const errorConstructors = new Map([\n ['EvalError', EvalError],\n ['RangeError', RangeError],\n ['ReferenceError', ReferenceError],\n ['SyntaxError', SyntaxError],\n ['TypeError', TypeError],\n ['URIError', URIError]\n ]);\n\n // Like Realm.apply except that it catches anything thrown and rethrows it\n // as an Error from this realm\n function callAndWrapError(target, ...args) {\n try {\n return target(...args);\n } catch (err) {\n if (Object(err) !== err) {\n // err is a primitive value, which is safe to rethrow\n throw err;\n }\n let eName, eMessage, eStack;\n try {\n // The child environment might seek to use 'err' to reach the\n // parent's intrinsics and corrupt them. `${err.name}` will cause\n // string coercion of 'err.name'. If err.name is an object (probably\n // a String of the parent Realm), the coercion uses\n // err.name.toString(), which is under the control of the parent. If\n // err.name were a primitive (e.g. a number), it would use\n // Number.toString(err.name), using the child's version of Number\n // (which the child could modify to capture its argument for later\n // use), however primitives don't have properties like .prototype so\n // they aren't useful for an attack.\n eName = `${err.name}`;\n eMessage = `${err.message}`;\n eStack = `${err.stack}`;\n // eName/eMessage/eStack are now child-realm primitive strings, and\n // safe to expose\n } catch (ignored) {\n // if err.name.toString() throws, keep the (parent realm) Error away\n // from the child\n throw new Error('unknown error');\n }\n const ErrorConstructor = errorConstructors.get(eName) || Error;\n try {\n throw new ErrorConstructor(eMessage);\n } catch (err2) {\n err2.stack = eStack; // replace with the captured inner stack\n throw err2;\n }\n }\n }\n\n class Realm {\n constructor() {\n // The Realm constructor is not intended to be used with the new operator\n // or to be subclassed. It may be used as the value of an extends clause\n // of a class definition but a super call to the Realm constructor will\n // cause an exception.\n\n // When Realm is called as a function, an exception is also raised because\n // a class constructor cannot be invoked without 'new'.\n throw new TypeError('Realm is not a constructor');\n }\n\n static makeRootRealm(options) {\n // This is the exposed interface.\n options = Object(options); // todo: sanitize\n\n // Bypass the constructor.\n const r = create(Realm.prototype);\n callAndWrapError(initRootRealm, unsafeRec, r, options);\n return r;\n }\n\n static makeCompartment() {\n // Bypass the constructor.\n const r = create(Realm.prototype);\n callAndWrapError(initCompartment, unsafeRec, r);\n return r;\n }\n\n // we omit the constructor because it is empty. All the personalization\n // takes place in one of the two static methods,\n // makeRootRealm/makeCompartment\n\n get global() {\n // this is safe against being called with strange 'this' because\n // baseGetGlobal immediately does a trademark check (it fails unless\n // this 'this' is present in a weakmap that is only populated with\n // legitimate Realm instances)\n return callAndWrapError(getRealmGlobal, this);\n }\n\n evaluate(x, endowments) {\n // safe against strange 'this', as above\n return callAndWrapError(realmEvaluate, this, x, endowments);\n }\n }\n\n defineProperties(Realm, {\n toString: {\n value: () => 'function Realm() { [shim code] }',\n writable: false,\n enumerable: false,\n configurable: true\n }\n });\n\n defineProperties(Realm.prototype, {\n toString: {\n value: () => '[object Realm]',\n writable: false,\n enumerable: false,\n configurable: true\n }\n });\n\n return Realm;\n}\n\n// The parentheses means we don't bind the 'buildChildRealm' name inside the\n// child's namespace. this would accept an anonymous function declaration.\n// function expression (not a declaration) so it has a completion value.\nconst buildChildRealmString = cleanupSource(`'use strict'; (${buildChildRealm})`);\n\nexport function createRealmFacade(unsafeRec, BaseRealm) {\n const { unsafeEval } = unsafeRec;\n\n // The BaseRealm is the Realm class created by\n // the shim. It's only valid for the context where\n // it was parsed.\n\n // The Realm facade is a lightweight class built in the\n // context a different context, that provide a fully\n // functional Realm class using the intrisics\n // of that context.\n\n // This process is simplified because all methods\n // and properties on a realm instance already return\n // values using the intrinsics of the realm's context.\n\n // Invoke the BaseRealm constructor with Realm as the prototype.\n return unsafeEval(buildChildRealmString)(unsafeRec, BaseRealm);\n}\n","// Declare shorthand functions. Sharing these declarations across modules\n// improves both consistency and minification. Unused declarations are\n// dropped by the tree shaking process.\n\n// we capture these, not just for brevity, but for security. If any code\n// modifies Object to change what 'assign' points to, the Realm shim would be\n// corrupted.\n\nexport const {\n assign,\n create,\n freeze,\n defineProperties, // Object.defineProperty is allowed to fail silentlty, use Object.defineProperties instead.\n getOwnPropertyDescriptor,\n getOwnPropertyDescriptors,\n getOwnPropertyNames,\n getPrototypeOf,\n setPrototypeOf\n} = Object;\n\nexport const {\n apply,\n ownKeys // Reflect.ownKeys includes Symbols and unenumerables, unlike Object.keys()\n} = Reflect;\n\n/**\n * uncurryThis()\n * See http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming\n * which only lives at http://web.archive.org/web/20160805225710/http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming\n *\n * Performance:\n * 1. The native call is about 10x faster on FF than chrome\n * 2. The version using Function.bind() is about 100x slower on FF, equal on chrome, 2x slower on Safari\n * 3. The version using a spread and Reflect.apply() is about 10x slower on FF, equal on chrome, 2x slower on Safari\n *\n * const bind = Function.prototype.bind;\n * const uncurryThis = bind.bind(bind.call);\n */\nconst uncurryThis = fn => (thisArg, ...args) => apply(fn, thisArg, args);\n\n// We also capture these for security: changes to Array.prototype after the\n// Realm shim runs shouldn't affect subsequent Realm operations.\nexport const objectHasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty),\n arrayForEach = uncurryThis(Array.prototype.forEach),\n arrayFilter = uncurryThis(Array.prototype.filter),\n arrayPush = uncurryThis(Array.prototype.push),\n arrayPop = uncurryThis(Array.prototype.pop),\n arrayJoin = uncurryThis(Array.prototype.join),\n arrayConcat = uncurryThis(Array.prototype.concat),\n regexpTest = uncurryThis(RegExp.prototype.test),\n stringMatch = uncurryThis(String.prototype.match),\n stringIncludes = uncurryThis(String.prototype.includes);\n","import { getOwnPropertyDescriptor } from './commons';\nimport { assert } from './utilities';\n\n// All the following stdlib items have the same name on both our intrinsics\n// object and on the global object. Unlike Infinity/NaN/undefined, these\n// should all be writable and configurable.\nconst sharedGlobalPropertyNames = [\n // *** 18.2 Function Properties of the Global Object\n\n // 'eval', // comes from safeEval instead\n 'isFinite',\n 'isNaN',\n 'parseFloat',\n 'parseInt',\n\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n\n // *** 18.3 Constructor Properties of the Global Object\n\n 'Array',\n 'ArrayBuffer',\n 'Boolean',\n 'DataView',\n 'Date',\n 'Error',\n 'EvalError',\n 'Float32Array',\n 'Float64Array',\n // 'Function', // comes from safeFunction instead\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Map',\n 'Number',\n 'Object',\n 'Promise',\n 'Proxy',\n 'RangeError',\n 'ReferenceError',\n 'RegExp',\n 'Set',\n // 'SharedArrayBuffer' // removed on Jan 5, 2018\n 'String',\n 'Symbol',\n 'SyntaxError',\n 'TypeError',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Uint16Array',\n 'Uint32Array',\n 'URIError',\n 'WeakMap',\n 'WeakSet',\n\n // *** 18.4 Other Properties of the Global Object\n\n // 'Atomics', // removed on Jan 5, 2018\n 'JSON',\n 'Math',\n 'Reflect',\n\n // *** Annex B\n\n 'escape',\n 'unescape',\n\n // *** ECMA-402\n\n 'Intl'\n\n // *** ESNext\n\n // 'Realm' // Comes from createRealmGlobalObject()\n];\n\nexport function getSharedGlobalDescs(unsafeGlobal) {\n const descriptors = {\n // *** 18.1 Value Properties of the Global Object\n Infinity: { value: Infinity },\n NaN: { value: NaN },\n undefined: { value: undefined }\n };\n\n for (const name of sharedGlobalPropertyNames) {\n const desc = getOwnPropertyDescriptor(unsafeGlobal, name);\n if (desc) {\n // Abort if an accessor is found on the unsafe global object instead of a\n // data property. We should never get into this non standard situation.\n assert('value' in desc, `unexpected accessor on global property: ${name}`);\n\n descriptors[name] = {\n value: desc.value,\n writable: true,\n configurable: true\n };\n }\n }\n\n return descriptors;\n}\n","// Adapted from SES/Caja - Copyright (C) 2011 Google Inc.\n// https://github.com/google/caja/blob/master/src/com/google/caja/ses/startSES.js\n// https://github.com/google/caja/blob/master/src/com/google/caja/ses/repairES5.js\n\n/**\n * Replace the legacy accessors of Object to comply with strict mode\n * and ES2016 semantics, we do this by redefining them while in 'use strict'.\n *\n * todo: list the issues resolved\n *\n * This function can be used in two ways: (1) invoked directly to fix the primal\n * realm's Object.prototype, and (2) converted to a string to be executed\n * inside each new RootRealm to fix their Object.prototypes. Evaluation requires\n * the function to have no dependencies, so don't import anything from the outside.\n */\n\n// todo: this file should be moved out to a separate repo and npm module.\nexport function repairAccessors() {\n const {\n defineProperty,\n defineProperties,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n prototype: objectPrototype\n } = Object;\n\n // On some platforms, the implementation of these functions act as if they are\n // in sloppy mode: if they're invoked badly, they will expose the global object,\n // so we need to repair these for security. Thus it is our responsibility to fix\n // this, and we need to include repairAccessors. E.g. Chrome in 2016.\n\n try {\n // Verify that the method is not callable.\n // eslint-disable-next-line no-restricted-properties, no-underscore-dangle\n (0, objectPrototype.__lookupGetter__)('x');\n } catch (ignore) {\n // Throws, no need to patch.\n return;\n }\n\n function toObject(obj) {\n if (obj === undefined || obj === null) {\n throw new TypeError(`can't convert undefined or null to object`);\n }\n return Object(obj);\n }\n\n function asPropertyName(obj) {\n if (typeof obj === 'symbol') {\n return obj;\n }\n return `${obj}`;\n }\n\n function aFunction(obj, accessor) {\n if (typeof obj !== 'function') {\n throw TypeError(`invalid ${accessor} usage`);\n }\n return obj;\n }\n\n defineProperties(objectPrototype, {\n __defineGetter__: {\n value: function __defineGetter__(prop, func) {\n const O = toObject(this);\n defineProperty(O, prop, {\n get: aFunction(func, 'getter'),\n enumerable: true,\n configurable: true\n });\n }\n },\n __defineSetter__: {\n value: function __defineSetter__(prop, func) {\n const O = toObject(this);\n defineProperty(O, prop, {\n set: aFunction(func, 'setter'),\n enumerable: true,\n configurable: true\n });\n }\n },\n __lookupGetter__: {\n value: function __lookupGetter__(prop) {\n let O = toObject(this);\n prop = asPropertyName(prop);\n let desc;\n while (O && !(desc = getOwnPropertyDescriptor(O, prop))) {\n O = getPrototypeOf(O);\n }\n return desc && desc.get;\n }\n },\n __lookupSetter__: {\n value: function __lookupSetter__(prop) {\n let O = toObject(this);\n prop = asPropertyName(prop);\n let desc;\n while (O && !(desc = getOwnPropertyDescriptor(O, prop))) {\n O = getPrototypeOf(O);\n }\n return desc && desc.set;\n }\n }\n });\n}\n","// Adapted from SES/Caja\n// Copyright (C) 2011 Google Inc.\n// https://github.com/google/caja/blob/master/src/com/google/caja/ses/startSES.js\n// https://github.com/google/caja/blob/master/src/com/google/caja/ses/repairES5.js\n\n/**\n * This block replaces the original Function constructor, and the original\n * %GeneratorFunction% %AsyncFunction% and %AsyncGeneratorFunction%, with\n * safe replacements that throw if invoked.\n *\n * These are all reachable via syntax, so it isn't sufficient to just\n * replace global properties with safe versions. Our main goal is to prevent\n * access to the Function constructor through these starting points.\n\n * After this block is done, the originals must no longer be reachable, unless\n * a copy has been made, and funtions can only be created by syntax (using eval)\n * or by invoking a previously saved reference to the originals.\n */\n\n// todo: this file should be moved out to a separate repo and npm module.\nexport function repairFunctions() {\n const { defineProperties, getPrototypeOf, setPrototypeOf } = Object;\n\n /**\n * The process to repair constructors:\n * 1. Create an instance of the function by evaluating syntax\n * 2. Obtain the prototype from the instance\n * 3. Create a substitute tamed constructor\n * 4. Replace the original constructor with the tamed constructor\n * 5. Replace tamed constructor prototype property with the original one\n * 6. Replace its [[Prototype]] slot with the tamed constructor of Function\n */\n function repairFunction(name, declaration) {\n let FunctionInstance;\n try {\n // eslint-disable-next-line no-new-func\n FunctionInstance = (0, eval)(declaration);\n } catch (e) {\n if (e instanceof SyntaxError) {\n // Prevent failure on platforms where async and/or generators are not supported.\n return;\n }\n // Re-throw\n throw e;\n }\n const FunctionPrototype = getPrototypeOf(FunctionInstance);\n\n // Prevents the evaluation of source when calling constructor on the\n // prototype of functions.\n const TamedFunction = function() {\n throw new TypeError('Not available');\n };\n defineProperties(TamedFunction, { name: { value: name } });\n\n // (new Error()).constructors does not inherit from Function, because Error\n // was defined before ES6 classes. So we don't need to repair it too.\n\n // (Error()).constructor inherit from Function, which gets a tamed constructor here.\n\n // todo: in an ES6 class that does not inherit from anything, what does its\n // constructor inherit from? We worry that it inherits from Function, in\n // which case instances could give access to unsafeFunction. markm says\n // we're fine: the constructor inherits from Object.prototype\n\n // This line replaces the original constructor in the prototype chain\n // with the tamed one. No copy of the original is peserved.\n defineProperties(FunctionPrototype, { constructor: { value: TamedFunction } });\n\n // This line sets the tamed constructor's prototype data property to\n // the original one.\n defineProperties(TamedFunction, { prototype: { value: FunctionPrototype } });\n\n if (TamedFunction !== Function.prototype.constructor) {\n // Ensures that all functions meet \"instanceof Function\" in a realm.\n setPrototypeOf(TamedFunction, Function.prototype.constructor);\n }\n }\n\n // Here, the order of operation is important: Function needs to be repaired\n // first since the other repaired constructors need to inherit from the tamed\n // Function function constructor.\n\n // note: this really wants to be part of the standard, because new\n // constructors may be added in the future, reachable from syntax, and this\n // list must be updated to match.\n\n // \"plain arrow functions\" inherit from Function.prototype\n\n repairFunction('Function', '(function(){})');\n repairFunction('GeneratorFunction', '(function*(){})');\n repairFunction('AsyncFunction', '(async function(){})');\n repairFunction('AsyncGeneratorFunction', '(async function*(){})');\n}\n","// this module must never be importable outside the Realm shim itself\nimport { getSharedGlobalDescs } from './stdlib';\nimport { repairAccessors } from './repair/accessors';\nimport { repairFunctions } from './repair/functions';\nimport { cleanupSource } from './utilities';\nimport { freeze } from './commons';\n\n// A \"context\" is a fresh unsafe Realm as given to us by existing platforms.\n// We need this to implement the shim. However, when Realms land for real,\n// this feature will be provided by the underlying engine instead.\n\n// note: in a node module, the top-level 'this' is not the global object\n// (it's *something* but we aren't sure what), however an indirect eval of\n// 'this' will be the correct global object.\n\nconst unsafeGlobalSrc = \"'use strict'; this\";\nconst unsafeGlobalEvalSrc = `(0, eval)(\"'use strict'; this\")`;\n\n// This method is only exported for testing purposes.\nexport function createNewUnsafeGlobalForNode() {\n // Note that webpack and others will shim 'vm' including the method 'runInNewContext',\n // so the presence of vm is not a useful check\n\n // TODO: Find a better test that works with bundlers\n // eslint-disable-next-line no-new-func\n const isNode = new Function('try {return this===global}catch(e){ return false}')();\n\n if (!isNode) {\n return undefined;\n }\n\n // eslint-disable-next-line global-require\n const vm = require('vm');\n\n // Use unsafeGlobalEvalSrc to ensure we get the right 'this'.\n const unsafeGlobal = vm.runInNewContext(unsafeGlobalEvalSrc);\n\n return unsafeGlobal;\n}\n\n// This method is only exported for testing purposes.\nexport function createNewUnsafeGlobalForBrowser() {\n if (typeof document === 'undefined') {\n return undefined;\n }\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n\n document.body.appendChild(iframe);\n const unsafeGlobal = iframe.contentWindow.eval(unsafeGlobalSrc);\n\n // We keep the iframe attached to the DOM because removing it\n // causes its global object to lose intrinsics, its eval()\n // function to evaluate code, etc.\n\n // TODO: can we remove and garbage-collect the iframes?\n\n return unsafeGlobal;\n}\n\nconst getNewUnsafeGlobal = () => {\n const newUnsafeGlobalForBrowser = createNewUnsafeGlobalForBrowser();\n const newUnsafeGlobalForNode = createNewUnsafeGlobalForNode();\n if (\n (!newUnsafeGlobalForBrowser && !newUnsafeGlobalForNode) ||\n (newUnsafeGlobalForBrowser && newUnsafeGlobalForNode)\n ) {\n throw new Error('unexpected platform, unable to create Realm');\n }\n return newUnsafeGlobalForBrowser || newUnsafeGlobalForNode;\n};\n\n// The unsafeRec is shim-specific. It acts as the mechanism to obtain a fresh\n// set of intrinsics together with their associated eval and Function\n// evaluators. These must be used as a matched set, since the evaluators are\n// tied to a set of intrinsics, aka the \"undeniables\". If it were possible to\n// mix-and-match them from different contexts, that would enable some\n// attacks.\nfunction createUnsafeRec(unsafeGlobal, allShims = []) {\n const sharedGlobalDescs = getSharedGlobalDescs(unsafeGlobal);\n\n return freeze({\n unsafeGlobal,\n sharedGlobalDescs,\n unsafeEval: unsafeGlobal.eval,\n unsafeFunction: unsafeGlobal.Function,\n allShims\n });\n}\n\nconst repairAccessorsShim = cleanupSource(`\"use strict\"; (${repairAccessors})();`);\nconst repairFunctionsShim = cleanupSource(`\"use strict\"; (${repairFunctions})();`);\n\n// Create a new unsafeRec from a brand new context, with new intrinsics and a\n// new global object\nexport function createNewUnsafeRec(allShims) {\n const unsafeGlobal = getNewUnsafeGlobal();\n unsafeGlobal.eval(repairAccessorsShim);\n unsafeGlobal.eval(repairFunctionsShim);\n return createUnsafeRec(unsafeGlobal, allShims);\n}\n\n// Create a new unsafeRec from the current context, where the Realm shim is\n// being parsed and executed, aka the \"Primal Realm\"\nexport function createCurrentUnsafeRec() {\n const unsafeGlobal = (0, eval)(unsafeGlobalSrc);\n repairAccessors();\n repairFunctions();\n return createUnsafeRec(unsafeGlobal);\n}\n","import {\n arrayFilter,\n getOwnPropertyDescriptors,\n getOwnPropertyNames,\n objectHasOwnProperty,\n regexpTest\n} from './commons';\n\n// todo: think about how this interacts with endowments, check for conflicts\n// between the names being optimized and the ones added by endowments\n\n/**\n * Simplified validation of indentifier names: may only contain alphanumeric\n * characters (or \"$\" or \"_\"), and may not start with a digit. This is safe\n * and does not reduces the compatibility of the shim. The motivation for\n * this limitation was to decrease the complexity of the implementation,\n * and to maintain a resonable level of performance.\n * Note: \\w is equivalent [a-zA-Z_0-9]\n * See 11.6.1 Identifier Names\n */\nconst identifierPattern = /^[a-zA-Z_$][\\w$]*$/;\n\n/**\n * In JavaScript you cannot use these reserved words as variables.\n * See 11.6.1 Identifier Names\n */\nconst keywords = new Set([\n // 11.6.2.1 Keywords\n 'await',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'export',\n 'extends',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'import',\n 'in',\n 'instanceof',\n 'new',\n 'return',\n 'super',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n 'yield',\n\n // Also reserved when parsing strict mode code\n 'let',\n 'static',\n\n // 11.6.2.2 Future Reserved Words\n 'enum',\n\n // Also reserved when parsing strict mode code\n 'implements',\n 'package',\n 'protected',\n 'interface',\n 'private',\n 'public',\n\n // Reserved but not mentioned in specs\n 'await',\n\n 'null',\n 'true',\n 'false',\n\n 'this',\n 'arguments'\n]);\n\n/**\n * getOptimizableGlobals()\n * What variable names might it bring into scope? These include all\n * property names which can be variable names, including the names\n * of inherited properties. It excludes symbols and names which are\n * keywords. We drop symbols safely. Currently, this shim refuses\n * service if any of the names are keywords or keyword-like. This is\n * safe and only prevent performance optimization.\n */\nexport function getOptimizableGlobals(safeGlobal) {\n const descs = getOwnPropertyDescriptors(safeGlobal);\n\n // getOwnPropertyNames does ignore Symbols so we don't need this extra check:\n // typeof name === 'string' &&\n const constants = arrayFilter(getOwnPropertyNames(descs), name => {\n // Ensure we have a valid identifier. We use regexpTest rather than\n // /../.test() to guard against the case where RegExp has been poisoned.\n if (name === 'eval' || keywords.has(name) || !regexpTest(identifierPattern, name)) {\n return false;\n }\n\n const desc = descs[name];\n return (\n //\n // The getters will not have .writable, don't let the falsyness of\n // 'undefined' trick us: test with === false, not ! . However descriptors\n // inherit from the (potentially poisoned) global object, so we might see\n // extra properties which weren't really there. Accessor properties have\n // 'get/set/enumerable/configurable', while data properties have\n // 'value/writable/enumerable/configurable'.\n desc.configurable === false &&\n desc.writable === false &&\n //\n // Checks for data properties because they're the only ones we can\n // optimize (accessors are most likely non-constant). Descriptors can't\n // can't have accessors and value properties at the same time, therefore\n // this check is sufficient. Using explicit own property deal with the\n // case where Object.prototype has been poisoned.\n objectHasOwnProperty(desc, 'value')\n );\n });\n\n return constants;\n}\n","import { freeze, getPrototypeOf, objectHasOwnProperty } from './commons';\nimport { throwTantrum } from './utilities';\n\n/**\n * alwaysThrowHandler is a proxy handler which throws on any trap called.\n * It's made from a proxy with a get trap that throws. Its target is\n * an immutable (frozen) object and is safe to share.\n */\nconst alwaysThrowHandler = new Proxy(freeze({}), {\n get(target, prop) {\n throwTantrum(`unexpected scope handler trap called: ${prop}`);\n }\n});\n\n/**\n * ScopeHandler manages a Proxy which serves as the global scope for the\n * safeEvaluator operation (the Proxy is the argument of a 'with' binding).\n * As described in createSafeEvaluator(), it has several functions:\n * - allow the very first (and only the very first) use of 'eval' to map to\n * the real (unsafe) eval function, so it acts as a 'direct eval' and can\n * access its lexical scope (which maps to the 'with' binding, which the\n * ScopeHandler also controls).\n * - ensure that all subsequent uses of 'eval' map to the safeEvaluator,\n * which lives as the 'eval' property of the safeGlobal.\n * - route all other property lookups at the safeGlobal.\n * - hide the unsafeGlobal which lives on the scope chain above the 'with'.\n * - ensure the Proxy invariants despite some global properties being frozen.\n */\nexport function createScopeHandler(unsafeRec) {\n const { unsafeGlobal, unsafeEval } = unsafeRec;\n\n // This flag allow us to determine if the eval() call is an done by the\n // realm's code or if it is user-land invocation, so we can react differently.\n let useUnsafeEvaluator = false;\n\n return {\n // The scope handler throws if any trap other than get/set/has are run\n // (e.g. getOwnPropertyDescriptors, apply, getPrototypeOf).\n // eslint-disable-next-line no-proto\n __proto__: alwaysThrowHandler,\n\n allowUnsafeEvaluatorOnce() {\n useUnsafeEvaluator = true;\n },\n\n unsafeEvaluatorAllowed() {\n return useUnsafeEvaluator;\n },\n\n get(target, prop) {\n // Special treatment for eval. The very first lookup of 'eval' gets the\n // unsafe (real direct) eval, so it will get the lexical scope that uses\n // the 'with' context.\n if (prop === 'eval') {\n // test that it is true rather than merely truthy\n if (useUnsafeEvaluator === true) {\n // revoke before use\n useUnsafeEvaluator = false;\n return unsafeEval;\n }\n return target.eval;\n }\n\n // todo: shim integrity, capture Symbol.unscopables\n if (prop === Symbol.unscopables) {\n // Safe to return a primal realm Object here because the only code that\n // can do a get() on a non-string is the internals of with() itself,\n // and the only thing it does is to look for properties on it. User\n // code cannot do a lookup on non-strings.\n return undefined;\n }\n\n // Properties of the global.\n if (prop in target) {\n return target[prop];\n }\n\n // Prevent the lookup for other properties.\n return undefined;\n },\n\n // eslint-disable-next-line class-methods-use-this\n set(target, prop, value) {\n // todo: allow modifications when target.hasOwnProperty(prop) and it\n // is writable, assuming we've already rejected overlap (see\n // createSafeEvaluatorFactory.factory). This TypeError gets replaced with\n // target[prop] = value\n if (objectHasOwnProperty(target, prop)) {\n // todo: shim integrity: TypeError, String\n throw new TypeError(`do not modify endowments like ${String(prop)}`);\n }\n\n // todo (optimization): keep a reference to the shadow avoids calling\n // getPrototypeOf on the target every time the set trap is invoked,\n // since safeGlobal === getPrototypeOf(target).\n getPrototypeOf(target)[prop] = value;\n\n // Return true after successful set.\n return true;\n },\n\n // we need has() to return false for some names to prevent the lookup from\n // climbing the scope chain and eventually reaching the unsafeGlobal\n // object, which is bad.\n\n // note: unscopables! every string in Object[Symbol.unscopables]\n\n // todo: we'd like to just have has() return true for everything, and then\n // use get() to raise a ReferenceError for anything not on the safe global.\n // But we want to be compatible with ReferenceError in the normal case and\n // the lack of ReferenceError in the 'typeof' case. Must either reliably\n // distinguish these two cases (the trap behavior might be different), or\n // we rely on a mandatory source-to-source transform to change 'typeof abc'\n // to XXX. We already need a mandatory parse to prevent the 'import',\n // since it's a special form instead of merely being a global variable/\n\n // note: if we make has() return true always, then we must implement a\n // set() trap to avoid subverting the protection of strict mode (it would\n // accept assignments to undefined globals, when it ought to throw\n // ReferenceError for such assignments)\n\n has(target, prop) {\n // proxies stringify 'prop', so no TOCTTOU danger here\n\n // unsafeGlobal: hide all properties of unsafeGlobal at the expense of 'typeof'\n // being wrong for those properties. For example, in the browser, evaluating\n // 'document = 3', will add a property to safeGlobal instead of throwing a\n // ReferenceError.\n if (prop === 'eval' || prop in target || prop in unsafeGlobal) {\n return true;\n }\n\n return false;\n }\n };\n}\n","// this \\s *must* match all kinds of syntax-defined whitespace. If e.g.\n// U+2028 (LINE SEPARATOR) or U+2029 (PARAGRAPH SEPARATOR) is treated as\n// whitespace by the parser, but not matched by /\\s/, then this would admit\n// an attack like: import\\u2028('power.js') . We're trying to distinguish\n// something like that from something like importnotreally('power.js') which\n// is perfectly safe.\n\nconst importParser = /^(.*)\\bimport\\s*(\\(|\\/\\/|\\/\\*)/m;\n\nexport function rejectImportExpressions(s) {\n const matches = importParser.exec(s);\n if (matches) {\n // todo: if we have a full parser available, use it here. If there is no\n // 'import' token in the string, we're safe.\n // if (!parse(s).contains('import')) return;\n const linenum = matches[1].split('\\n').length; // more or less\n throw new SyntaxError(`possible import expression rejected around line ${linenum}`);\n }\n}\n","// Portions adapted from V8 - Copyright 2016 the V8 project authors.\n// https://github.com/v8/v8/blob/master/src/builtins/builtins-function.cc\n\nimport {\n apply,\n arrayJoin,\n arrayPop,\n create,\n defineProperties,\n getOwnPropertyDescriptors,\n getPrototypeOf,\n regexpTest,\n setPrototypeOf,\n stringIncludes\n} from './commons';\nimport { getOptimizableGlobals } from './optimizer';\nimport { createScopeHandler } from './scopeHandler';\nimport { rejectImportExpressions } from './sourceParser';\nimport { assert, throwTantrum } from './utilities';\n\nfunction buildOptimizer(constants) {\n // No need to build an oprimizer when there are no constants.\n if (constants.length === 0) return '';\n // Use 'this' to avoid going through the scope proxy, which is unecessary\n // since the optimizer only needs references to the safe global.\n return `const {${arrayJoin(constants, ',')}} = this;`;\n}\n\nfunction createScopedEvaluatorFactory(unsafeRec, constants) {\n const { unsafeFunction } = unsafeRec;\n\n const optimizer = buildOptimizer(constants);\n\n // Create a function in sloppy mode, so that we can use 'with'. It returns\n // a function in strict mode that evaluates the provided code using direct\n // eval, and thus in strict mode in the same scope. We must be very careful\n // to not create new names in this scope\n\n // 1: we use 'with' (around a Proxy) to catch all free variable names. The\n // first 'arguments[0]' holds the Proxy which safely wraps the safeGlobal\n // 2: 'optimizer' catches common variable names for speed\n // 3: The inner strict function is effectively passed two parameters:\n // a) its arguments[0] is the source to be directly evaluated.\n // b) its 'this' is the this binding seen by the code being directly evaluated.\n\n // everything in the 'optimizer' string is looked up in the proxy\n // (including an 'arguments[0]', which points at the Proxy). 'function' is\n // a keyword, not a variable, so it is not looked up. then 'eval' is looked\n // up in the proxy, that's the first time it is looked up after\n // useUnsafeEvaluator is turned on, so the proxy returns the real the\n // unsafeEval, which satisfies the IsDirectEvalTrap predicate, so it uses\n // the direct eval and gets the lexical scope. The second 'arguments[0]' is\n // looked up in the context of the inner function. The *contents* of\n // arguments[0], because we're using direct eval, are looked up in the\n // Proxy, by which point the useUnsafeEvaluator switch has been flipped\n // back to 'false', so any instances of 'eval' in that string will get the\n // safe evaluator.\n\n return unsafeFunction(`\n with (arguments[0]) {\n ${optimizer}\n return function() {\n 'use strict';\n return eval(arguments[0]);\n };\n }\n `);\n}\n\nexport function createSafeEvaluatorFactory(unsafeRec, safeGlobal) {\n const { unsafeFunction } = unsafeRec;\n\n const scopeHandler = createScopeHandler(unsafeRec);\n const optimizableGlobals = getOptimizableGlobals(safeGlobal);\n const scopedEvaluatorFactory = createScopedEvaluatorFactory(unsafeRec, optimizableGlobals);\n\n function factory(endowments = {}) {\n // todo (shim limitation): scan endowments, throw error if endowment\n // overlaps with the const optimization (which would otherwise\n // incorrectly shadow endowments), or if endowments includes 'eval'. Also\n // prohibit accessor properties (to be able to consistently explain\n // things in terms of shimming the global lexical scope).\n // writeable-vs-nonwritable == let-vs-const, but there's no\n // global-lexical-scope equivalent of an accessor, outside what we can\n // explain/spec\n const scopeTarget = create(safeGlobal, getOwnPropertyDescriptors(endowments));\n const scopeProxy = new Proxy(scopeTarget, scopeHandler);\n const scopedEvaluator = apply(scopedEvaluatorFactory, safeGlobal, [scopeProxy]);\n\n // We use the the concise method syntax to create an eval without a\n // [[Construct]] behavior (such that the invocation \"new eval()\" throws\n // TypeError: eval is not a constructor\"), but which still accepts a\n // 'this' binding.\n const safeEval = {\n eval(src) {\n src = `${src}`;\n rejectImportExpressions(src);\n scopeHandler.allowUnsafeEvaluatorOnce();\n let err;\n try {\n // Ensure that \"this\" resolves to the safe global.\n return apply(scopedEvaluator, safeGlobal, [src]);\n } catch (e) {\n // stash the child-code error in hopes of debugging the internal failure\n err = e;\n throw e;\n } finally {\n // belt and suspenders: the proxy switches this off immediately after\n // the first access, but if that's not the case we abort.\n if (scopeHandler.unsafeEvaluatorAllowed()) {\n throwTantrum('handler did not revoke useUnsafeEvaluator', err);\n }\n }\n }\n }.eval;\n\n // safeEval's prototype is currently the primal realm's\n // Function.prototype, which we must not let escape. To make 'eval\n // instanceof Function' be true inside the realm, we need to point it at\n // the RootRealm's value.\n\n // Ensure that eval from any compartment in a root realm is an instance\n // of Function in any compartment of the same root realm.\n setPrototypeOf(safeEval, unsafeFunction.prototype);\n\n assert(getPrototypeOf(safeEval).constructor !== Function, 'hide Function');\n assert(getPrototypeOf(safeEval).constructor !== unsafeFunction, 'hide unsafeFunction');\n\n // note: be careful to not leak our primal Function.prototype by setting\n // this to a plain arrow function. Now that we have safeEval, use it.\n defineProperties(safeEval, {\n toString: {\n value: safeEval(\"() => 'function eval() { [shim code] }'\"),\n writable: false,\n enumerable: false,\n configurable: true\n }\n });\n\n return safeEval;\n }\n\n return factory;\n}\n\nexport function createSafeEvaluator(safeEvaluatorFactory) {\n return safeEvaluatorFactory();\n}\n\nexport function createSafeEvaluatorWhichTakesEndowments(safeEvaluatorFactory) {\n return (x, endowments) => safeEvaluatorFactory(endowments)(x);\n}\n\n/**\n * A safe version of the native Function which relies on\n * the safety of evalEvaluator for confinement.\n */\nexport function createFunctionEvaluator(unsafeRec, safeEval) {\n const { unsafeFunction, unsafeGlobal } = unsafeRec;\n\n const safeFunction = function Function(...params) {\n const functionBody = `${arrayPop(params) || ''}`;\n let functionParams = `${arrayJoin(params, ',')}`;\n if (!regexpTest(/^[\\w\\s,]*$/, functionParams)) {\n throw new unsafeGlobal.SyntaxError(\n 'shim limitation: Function arg must be simple ASCII identifiers, possibly separated by commas: no default values, pattern matches, or non-ASCII parameter names'\n );\n // this protects against Matt Austin's clever attack:\n // Function(\"arg=`\", \"/*body`){});({x: this/**/\")\n // which would turn into\n // (function(arg=`\n // /*``*/){\n // /*body`){});({x: this/**/\n // })\n // which parses as a default argument of `\\n/*``*/){\\n/*body` , which\n // is a pair of template literals back-to-back (so the first one\n // nominally evaluates to the parser to use on the second one), which\n // can't actually execute (because the first literal evals to a string,\n // which can't be a parser function), but that doesn't matter because\n // the function is bypassed entirely. When that gets evaluated, it\n // defines (but does not invoke) a function, then evaluates a simple\n // {x: this} expression, giving access to the safe global.\n }\n\n // Is this a real functionBody, or is someone attempting an injection\n // attack? This will throw a SyntaxError if the string is not actually a\n // function body. We coerce the body into a real string above to prevent\n // someone from passing an object with a toString() that returns a safe\n // string the first time, but an evil string the second time.\n // eslint-disable-next-line no-new, new-cap\n new unsafeFunction(functionBody);\n\n if (stringIncludes(functionParams, ')')) {\n // If the formal parameters string include ) - an illegal\n // character - it may make the combined function expression\n // compile. We avoid this problem by checking for this early on.\n\n // note: v8 throws just like this does, but chrome accepts e.g. 'a = new Date()'\n throw new unsafeGlobal.SyntaxError(\n 'shim limitation: Function arg string contains parenthesis'\n );\n // todo: shim integrity threat if they change SyntaxError\n }\n\n // todo: check to make sure this .length is safe. markm says safe.\n if (functionParams.length > 0) {\n // If the formal parameters include an unbalanced block comment, the\n // function must be rejected. Since JavaScript does not allow nested\n // comments we can include a trailing block comment to catch this.\n functionParams += '\\n/*``*/';\n }\n\n // todo: fix `this` binding in Function().\n const src = `(function(${functionParams}){\\n${functionBody}\\n})`;\n\n return safeEval(src);\n };\n\n // Ensure that Function from any compartment in a root realm can be used\n // with instance checks in any compartment of the same root realm.\n setPrototypeOf(safeFunction, unsafeFunction.prototype);\n\n assert(getPrototypeOf(safeFunction).constructor !== Function, 'hide Function');\n assert(getPrototypeOf(safeFunction).constructor !== unsafeFunction, 'hide unsafeFunction');\n\n defineProperties(safeFunction, {\n // Ensure that any function created in any compartment in a root realm is an\n // instance of Function in any compartment of the same root ralm.\n prototype: { value: unsafeFunction.prototype },\n\n // Provide a custom output without overwriting the Function.prototype.toString\n // which is called by some third-party libraries.\n toString: {\n value: safeEval(\"() => 'function Function() { [shim code] }'\"),\n writable: false,\n enumerable: false,\n configurable: true\n }\n });\n\n return safeFunction;\n}\n","import { createRealmFacade, buildChildRealm } from './realmFacade';\nimport { createNewUnsafeRec, createCurrentUnsafeRec } from './unsafeRec';\nimport {\n createSafeEvaluatorFactory,\n createSafeEvaluator,\n createSafeEvaluatorWhichTakesEndowments,\n createFunctionEvaluator\n} from './evaluators';\nimport { assert } from './utilities';\nimport { create, defineProperties, freeze, arrayConcat } from './commons';\n\n// Mimic private members on the realm instances.\n// We define it in the same module and do not export it.\nconst RealmRecForRealmInstance = new WeakMap();\n\nfunction getRealmRecForRealmInstance(realm) {\n // Detect non-objects.\n assert(Object(realm) === realm, 'bad object, not a Realm instance');\n // Realm instance has no realmRec. Should not proceed.\n assert(RealmRecForRealmInstance.has(realm), 'Realm instance has no record');\n\n return RealmRecForRealmInstance.get(realm);\n}\n\nfunction registerRealmRecForRealmInstance(realm, realmRec) {\n // Detect non-objects.\n assert(Object(realm) === realm, 'bad object, not a Realm instance');\n // Attempt to change an existing realmRec on a realm instance. Should not proceed.\n assert(!RealmRecForRealmInstance.has(realm), 'Realm instance already has a record');\n\n RealmRecForRealmInstance.set(realm, realmRec);\n}\n\n// Initialize the global variables for the new Realm.\nfunction setDefaultBindings(sharedGlobalDescs, safeGlobal, safeEval, safeFunction) {\n defineProperties(safeGlobal, sharedGlobalDescs);\n\n defineProperties(safeGlobal, {\n eval: {\n value: safeEval,\n writable: true,\n configurable: true\n },\n Function: {\n value: safeFunction,\n writable: true,\n configurable: true\n }\n });\n}\n\nfunction createRealmRec(unsafeRec) {\n const { sharedGlobalDescs, unsafeGlobal } = unsafeRec;\n\n const safeGlobal = create(unsafeGlobal.Object.prototype);\n const safeEvaluatorFactory = createSafeEvaluatorFactory(unsafeRec, safeGlobal);\n const safeEval = createSafeEvaluator(safeEvaluatorFactory);\n const safeEvalWhichTakesEndowments = createSafeEvaluatorWhichTakesEndowments(\n safeEvaluatorFactory\n );\n const safeFunction = createFunctionEvaluator(unsafeRec, safeEval);\n\n setDefaultBindings(sharedGlobalDescs, safeGlobal, safeEval, safeFunction);\n\n const realmRec = freeze({\n safeGlobal,\n safeEval,\n safeEvalWhichTakesEndowments,\n safeFunction\n });\n\n return realmRec;\n}\n\n/**\n * A root realm uses a fresh set of new intrinics. Here we first create\n * a new unsafe record, which inherits the shims. Then we proceed with\n * the creation of the realm record, and we apply the shims.\n */\nfunction initRootRealm(parentUnsafeRec, self, options) {\n // note: 'self' is the instance of the Realm.\n\n // todo: investigate attacks via Array.species\n // todo: this accepts newShims='string', but it should reject that\n const { shims: newShims } = options;\n const allShims = arrayConcat(parentUnsafeRec.allShims, newShims);\n\n // The unsafe record is created already repaired.\n const unsafeRec = createNewUnsafeRec(allShims);\n\n // eslint-disable-next-line no-use-before-define\n const Realm = createRealmFacade(unsafeRec, BaseRealm);\n\n // Add a Realm descriptor to sharedGlobalDescs, so it can be defined onto the\n // safeGlobal like the rest of the globals.\n unsafeRec.sharedGlobalDescs.Realm = {\n value: Realm,\n writable: true,\n configurable: true\n };\n\n // Creating the realmRec provides the global object, eval() and Function()\n // to the realm.\n const realmRec = createRealmRec(unsafeRec);\n\n // Apply all shims in the new RootRealm. We don't do this for compartments.\n const { safeEvalWhichTakesEndowments } = realmRec;\n for (const shim of allShims) {\n safeEvalWhichTakesEndowments(shim);\n }\n\n // The realmRec acts as a private field on the realm instance.\n registerRealmRecForRealmInstance(self, realmRec);\n}\n\n/**\n * A compartment shares the intrinsics of its root realm. Here, only a\n * realmRec is necessary to hold the global object, eval() and Function().\n */\nfunction initCompartment(unsafeRec, self) {\n // note: 'self' is the instance of the Realm.\n\n const realmRec = createRealmRec(unsafeRec);\n\n // The realmRec acts as a private field on the realm instance.\n registerRealmRecForRealmInstance(self, realmRec);\n}\n\nfunction getRealmGlobal(self) {\n const { safeGlobal } = getRealmRecForRealmInstance(self);\n return safeGlobal;\n}\n\nfunction realmEvaluate(self, x, endowments = {}) {\n // todo: don't pass in primal-realm objects like {}, for safety. OTOH its\n // properties are copied onto the new global 'target'.\n // todo: figure out a way to membrane away the contents to safety.\n const { safeEvalWhichTakesEndowments } = getRealmRecForRealmInstance(self);\n return safeEvalWhichTakesEndowments(x, endowments);\n}\n\nconst BaseRealm = {\n initRootRealm,\n initCompartment,\n getRealmGlobal,\n realmEvaluate\n};\n\n// Create the current unsafeRec from the current \"primal\" environment (the realm\n// where the Realm shim is loaded and executed).\nconst currentUnsafeRec = createCurrentUnsafeRec();\n\n/**\n * The \"primal\" realm class is defined in the current \"primal\" environment,\n * and is part of the shim. There is no need to facade this class via evaluation\n * because both share the same intrinsics.\n */\nconst Realm = buildChildRealm(currentUnsafeRec, BaseRealm);\n\nexport default Realm;\n"],"names":[],"mappings":"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"}