From 7fda04da9fa681af1ac6953d629086e54ccf104d Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Sun, 30 Aug 2026 10:33:31 +0200 Subject: [PATCH] Reject boxed Symbols in structuredClone --- .../structuredClone/__tests__/structuredClone-itest.js | 1 + .../src/private/webapis/structuredClone/structuredClone.js | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js b/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js index 402e055048d..c21922263c6 100644 --- a/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js +++ b/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js @@ -86,6 +86,7 @@ describe('structuredClone', () => { it('throws with symbols, functions, WeakMap, WeakSet, Promise', () => { expectDataCloneError(() => structuredClone(Symbol())); + expectDataCloneError(() => structuredClone(Object(Symbol()))); expectDataCloneError(() => structuredClone(() => {})); expectDataCloneError(() => structuredClone(new WeakMap())); expectDataCloneError(() => structuredClone(new WeakSet())); diff --git a/packages/react-native/src/private/webapis/structuredClone/structuredClone.js b/packages/react-native/src/private/webapis/structuredClone/structuredClone.js index 89a7f90725b..d6f0a486ebd 100644 --- a/packages/react-native/src/private/webapis/structuredClone/structuredClone.js +++ b/packages/react-native/src/private/webapis/structuredClone/structuredClone.js @@ -166,6 +166,13 @@ function structuredCloneInternal(value: T): T { return result; } + if (value instanceof Symbol) { + throw new DOMException( + "Failed to execute 'structuredClone' on 'Window': Symbol object could not be cloned.", + 'DataCloneError', + ); + } + // Known non-serializable objects. if (isNonSerializableObject(value) || isPlatformObject(value)) { throw new DOMException(