From 3d29d441d31f963d30f06ecdc554c6e57765814a Mon Sep 17 00:00:00 2001 From: "Mark S. Miller" Date: Mon, 13 Jan 2025 13:51:31 -0800 Subject: [PATCH] refactor(ses): getenv detects more errors --- packages/ses/src/error/tame-console.js | 4 -- .../ses/src/error/tame-error-constructor.js | 11 ----- packages/ses/src/lockdown.js | 45 ++++++++++--------- packages/ses/src/reporting.js | 5 +-- packages/ses/src/tame-domains.js | 4 -- packages/ses/src/tame-harden.js | 6 +-- packages/ses/src/tame-locale-methods.js | 3 -- packages/ses/src/tame-regexp-constructor.js | 3 -- 8 files changed, 26 insertions(+), 55 deletions(-) diff --git a/packages/ses/src/error/tame-console.js b/packages/ses/src/error/tame-console.js index 92f66fdaff..292b59735c 100644 --- a/packages/ses/src/error/tame-console.js +++ b/packages/ses/src/error/tame-console.js @@ -41,10 +41,6 @@ export const tameConsole = ( unhandledRejectionTrapping = 'report', optGetStackString = undefined, ) => { - consoleTaming === 'safe' || - consoleTaming === 'unsafe' || - failFast(`unrecognized consoleTaming ${consoleTaming}`); - let loggedErrorHandler; if (optGetStackString === undefined) { loggedErrorHandler = defaultHandler; diff --git a/packages/ses/src/error/tame-error-constructor.js b/packages/ses/src/error/tame-error-constructor.js index db599529f9..28a3a3dd84 100644 --- a/packages/ses/src/error/tame-error-constructor.js +++ b/packages/ses/src/error/tame-error-constructor.js @@ -1,6 +1,5 @@ import { FERAL_ERROR, - TypeError, apply, construct, defineProperties, @@ -36,16 +35,6 @@ export default function tameErrorConstructor( errorTaming = 'safe', stackFiltering = 'concise', ) { - if ( - errorTaming !== 'safe' && - errorTaming !== 'unsafe' && - errorTaming !== 'unsafe-debug' - ) { - throw TypeError(`unrecognized errorTaming ${errorTaming}`); - } - if (stackFiltering !== 'concise' && stackFiltering !== 'verbose') { - throw TypeError(`unrecognized stackFiltering ${stackFiltering}`); - } const ErrorPrototype = FERAL_ERROR.prototype; const { captureStackTrace: originalCaptureStackTrace } = FERAL_ERROR; diff --git a/packages/ses/src/lockdown.js b/packages/ses/src/lockdown.js index d55e8b2ebf..865ee710c5 100644 --- a/packages/ses/src/lockdown.js +++ b/packages/ses/src/lockdown.js @@ -162,28 +162,39 @@ export const repairIntrinsics = (options = {}) => { // for an explanation. const { - errorTaming = getenv('LOCKDOWN_ERROR_TAMING', 'safe'), + errorTaming = getenv('LOCKDOWN_ERROR_TAMING', 'safe', [ + 'unsafe', + 'unsafe-debug', + ]), errorTrapping = /** @type {"platform" | "none" | "report" | "abort" | "exit"} */ ( - getenv('LOCKDOWN_ERROR_TRAPPING', 'platform') + getenv('LOCKDOWN_ERROR_TRAPPING', 'platform', [ + 'none', + 'report', + 'abort', + 'exit', + ]) ), reporting = /** @type {"platform" | "console" | "none"} */ ( - getenv('LOCKDOWN_REPORTING', 'platform') + getenv('LOCKDOWN_REPORTING', 'platform', ['console', 'none']) ), unhandledRejectionTrapping = /** @type {"none" | "report"} */ ( - getenv('LOCKDOWN_UNHANDLED_REJECTION_TRAPPING', 'report') + getenv('LOCKDOWN_UNHANDLED_REJECTION_TRAPPING', 'report', ['none']) ), - regExpTaming = getenv('LOCKDOWN_REGEXP_TAMING', 'safe'), - localeTaming = getenv('LOCKDOWN_LOCALE_TAMING', 'safe'), + regExpTaming = getenv('LOCKDOWN_REGEXP_TAMING', 'safe', ['unsafe']), + localeTaming = getenv('LOCKDOWN_LOCALE_TAMING', 'safe', ['unsafe']), consoleTaming = /** @type {'unsafe' | 'safe'} */ ( - getenv('LOCKDOWN_CONSOLE_TAMING', 'safe') + getenv('LOCKDOWN_CONSOLE_TAMING', 'safe', ['unsafe']) ), overrideTaming = /** @type {'moderate' | 'min' | 'severe'} */ ( - getenv('LOCKDOWN_OVERRIDE_TAMING', 'moderate') + getenv('LOCKDOWN_OVERRIDE_TAMING', 'moderate', ['min', 'severe']) ), - stackFiltering = getenv('LOCKDOWN_STACK_FILTERING', 'concise'), - domainTaming = getenv('LOCKDOWN_DOMAIN_TAMING', 'safe'), - evalTaming = getenv('LOCKDOWN_EVAL_TAMING', 'safeEval'), + stackFiltering = getenv('LOCKDOWN_STACK_FILTERING', 'concise', ['verbose']), + domainTaming = getenv('LOCKDOWN_DOMAIN_TAMING', 'safe', ['unsafe']), + evalTaming = getenv('LOCKDOWN_EVAL_TAMING', 'safeEval', [ + 'unsafeEval', + 'noEval', + ]), overrideDebug = arrayFilter( stringSplit(getenv('LOCKDOWN_OVERRIDE_DEBUG', ''), ','), /** @param {string} debugName */ @@ -192,22 +203,14 @@ export const repairIntrinsics = (options = {}) => { legacyRegeneratorRuntimeTaming = getenv( 'LOCKDOWN_LEGACY_REGENERATOR_RUNTIME_TAMING', 'safe', + ['unsafe-ignore'], ), - __hardenTaming__ = getenv('LOCKDOWN_HARDEN_TAMING', 'safe'), + __hardenTaming__ = getenv('LOCKDOWN_HARDEN_TAMING', 'safe', ['unsafe']), dateTaming, // deprecated mathTaming, // deprecated ...extraOptions } = options; - legacyRegeneratorRuntimeTaming === 'safe' || - legacyRegeneratorRuntimeTaming === 'unsafe-ignore' || - Fail`lockdown(): non supported option legacyRegeneratorRuntimeTaming: ${q(legacyRegeneratorRuntimeTaming)}`; - - evalTaming === 'unsafeEval' || - evalTaming === 'safeEval' || - evalTaming === 'noEval' || - Fail`lockdown(): non supported option evalTaming: ${q(evalTaming)}`; - // Assert that only supported options were passed. // Use Reflect.ownKeys to reject symbol-named properties as well. const extraOptionsNames = ownKeys(extraOptions); diff --git a/packages/ses/src/reporting.js b/packages/ses/src/reporting.js index 04cbed1339..d9bc3331be 100644 --- a/packages/ses/src/reporting.js +++ b/packages/ses/src/reporting.js @@ -1,4 +1,4 @@ -import { TypeError, functionBind, globalThis } from './commons.js'; +import { functionBind, globalThis } from './commons.js'; import { assert } from './error/assert.js'; /** @@ -51,9 +51,6 @@ export const chooseReporter = reporting => { if (reporting === 'none') { return makeReportPrinter(mute); } - if (reporting !== 'platform' && reporting !== 'console') { - throw new TypeError(`Invalid lockdown reporting option: ${reporting}`); - } if ( reporting === 'console' || globalThis.window === globalThis || diff --git a/packages/ses/src/tame-domains.js b/packages/ses/src/tame-domains.js index 7b5adcbe4c..c7864eb921 100644 --- a/packages/ses/src/tame-domains.js +++ b/packages/ses/src/tame-domains.js @@ -8,10 +8,6 @@ import { } from './commons.js'; export function tameDomains(domainTaming = 'safe') { - if (domainTaming !== 'safe' && domainTaming !== 'unsafe') { - throw TypeError(`unrecognized domainTaming ${domainTaming}`); - } - if (domainTaming === 'unsafe') { return; } diff --git a/packages/ses/src/tame-harden.js b/packages/ses/src/tame-harden.js index 455bbbe5c3..d9b8db476b 100644 --- a/packages/ses/src/tame-harden.js +++ b/packages/ses/src/tame-harden.js @@ -1,14 +1,10 @@ /* eslint-disable no-restricted-globals */ -import { TypeError, freeze } from './commons.js'; +import { freeze } from './commons.js'; /** @import {Harden} from '../types.js'; */ /** @type {(safeHarden: Harden, hardenTaming: 'safe' | 'unsafe') => Harden} */ export const tameHarden = (safeHarden, hardenTaming) => { - if (hardenTaming !== 'safe' && hardenTaming !== 'unsafe') { - throw TypeError(`unrecognized fakeHardenOption ${hardenTaming}`); - } - if (hardenTaming === 'safe') { return safeHarden; } diff --git a/packages/ses/src/tame-locale-methods.js b/packages/ses/src/tame-locale-methods.js index 2ef0edf79c..d4e3418a80 100644 --- a/packages/ses/src/tame-locale-methods.js +++ b/packages/ses/src/tame-locale-methods.js @@ -44,9 +44,6 @@ const nonLocaleCompare = tamedMethods.localeCompare; const numberToString = tamedMethods.toString; export default function tameLocaleMethods(intrinsics, localeTaming = 'safe') { - if (localeTaming !== 'safe' && localeTaming !== 'unsafe') { - throw TypeError(`unrecognized localeTaming ${localeTaming}`); - } if (localeTaming === 'unsafe') { return; } diff --git a/packages/ses/src/tame-regexp-constructor.js b/packages/ses/src/tame-regexp-constructor.js index c2be6f2c2d..cee05fd332 100644 --- a/packages/ses/src/tame-regexp-constructor.js +++ b/packages/ses/src/tame-regexp-constructor.js @@ -8,9 +8,6 @@ import { } from './commons.js'; export default function tameRegExpConstructor(regExpTaming = 'safe') { - if (regExpTaming !== 'safe' && regExpTaming !== 'unsafe') { - throw TypeError(`unrecognized regExpTaming ${regExpTaming}`); - } const RegExpPrototype = FERAL_REG_EXP.prototype; const makeRegExpConstructor = (_ = {}) => {