ses
Version:
Hardened JavaScript for Fearless Cooperation
42 lines (36 loc) • 1 kB
JavaScript
import {
Math,
TypeError,
create,
getOwnPropertyDescriptors,
objectPrototype,
} from './commons.js';
export default function tameMathObject() {
const originalMath = Math;
const initialMath = originalMath; // to follow the naming pattern
const { random: _, ...otherDescriptors } =
getOwnPropertyDescriptors(originalMath);
// Use concise methods to obtain named functions without constructors.
const tamedMethods = {
/**
* `%SharedMath%.random()` throws a TypeError starting with "secure mode".
* See https://github.com/endojs/endo/issues/910#issuecomment-1581855420
*/
random() {
throw TypeError('secure mode %SharedMath%.random() throws');
},
};
const sharedMath = create(objectPrototype, {
...otherDescriptors,
random: {
value: tamedMethods.random,
writable: true,
enumerable: false,
configurable: true,
},
});
return {
'%InitialMath%': initialMath,
'%SharedMath%': sharedMath,
};
}