Skip to content

Commit 19203a2

Browse files
committed
[Fast Refresh] Fix crashes caused by rogue getters and Proxies (#20030)
1 parent 2eb3181 commit 19203a2

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

packages/react-refresh/src/ReactFreshRuntime.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,15 @@ function cloneSet<T>(set: Set<T>): Set<T> {
178178
return clone;
179179
}
180180

181+
// This is a safety mechanism to protect against rogue getters and Proxies.
182+
function getProperty(object, property) {
183+
try {
184+
return object[property];
185+
} catch (err) {
186+
return undefined;
187+
}
188+
}
189+
181190
export function performReactRefresh(): RefreshUpdate | null {
182191
if (!__DEV__) {
183192
throw new Error(
@@ -322,7 +331,7 @@ export function register(type: any, id: string): void {
322331

323332
// Visit inner types because we might not have registered them.
324333
if (typeof type === 'object' && type !== null) {
325-
switch (type.$$typeof) {
334+
switch (getProperty(type, '$$typeof')) {
326335
case REACT_FORWARD_REF_TYPE:
327336
register(type.render, id + '$render');
328337
break;
@@ -676,7 +685,7 @@ export function isLikelyComponentType(type: any): boolean {
676685
}
677686
case 'object': {
678687
if (type != null) {
679-
switch (type.$$typeof) {
688+
switch (getProperty(type, '$$typeof')) {
680689
case REACT_FORWARD_REF_TYPE:
681690
case REACT_MEMO_TYPE:
682691
// Definitely React components.

0 commit comments

Comments
 (0)