diff --git a/CHANGELOG.md b/CHANGELOG.md index 921c44b96219..33f9a37d00fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - `[jest-mock]` Improve user input validation and error messages of `spyOn` and `replaceProperty` methods ([#14087](https://github.com/facebook/jest/pull/14087)) - `[jest-runtime]` Bind `jest.isolateModulesAsync` to `this` ([#14083](https://github.com/facebook/jest/pull/14083)) - `[jest-runtime]` Forward `wrapperLength` to the `Script` constructor as `columnOffset` for accurate debugging ([#14148](https://github.com/facebook/jest/pull/14148)) +- `[jest-runtime]` Guard `_isMockFunction` access with `in` ([#14188](https://github.com/facebook/jest/pull/14188)) - `[jest-snapshot]` Fix a potential bug when not using prettier and improve performance ([#14036](https://github.com/facebook/jest/pull/14036)) - `[@jest/transform]` Do not instrument `.json` modules ([#14048](https://github.com/facebook/jest/pull/14048)) diff --git a/packages/jest-runtime/src/__tests__/runtime_resetModules_unsafe_global_proxy.js b/packages/jest-runtime/src/__tests__/runtime_resetModules_unsafe_global_proxy.js new file mode 100644 index 000000000000..b276b2f12e3b --- /dev/null +++ b/packages/jest-runtime/src/__tests__/runtime_resetModules_unsafe_global_proxy.js @@ -0,0 +1,32 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +'use strict'; + +let createRuntime; + +describe('Runtime', () => { + beforeEach(() => { + createRuntime = require('createRuntime'); + }); + + describe('resetModules', () => { + it('does not throw when accessing _isMockFunction on an unsafe global', async () => { + const runtime = await createRuntime(__filename); + runtime._environment.global.UNSAFE_GLOBAL = new Proxy( + {}, + { + get(target, p, receiver) { + if (p === '_isMockFunction') throw new Error('Unsafe global!'); + }, + }, + ); + expect(() => runtime.resetModules()).not.toThrow(); + }); + }); +}); diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index d59477690cb1..b34ecdfe3890 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1218,6 +1218,7 @@ export default class Runtime { if ( ((typeof globalMock === 'object' && globalMock !== null) || typeof globalMock === 'function') && + '_isMockFunction' in globalMock && globalMock._isMockFunction === true ) { globalMock.mockClear();