Skip to content

Commit 49ae721

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

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

packages/react-refresh/src/ReactFreshRuntime.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,16 @@ 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+
// Intentionally ignore.
187+
return undefined;
188+
}
189+
}
190+
181191
export function performReactRefresh(): RefreshUpdate | null {
182192
if (!__DEV__) {
183193
throw new Error(
@@ -322,7 +332,7 @@ export function register(type: any, id: string): void {
322332

323333
// Visit inner types because we might not have registered them.
324334
if (typeof type === 'object' && type !== null) {
325-
switch (type.$$typeof) {
335+
switch (getProperty(type, '$$typeof')) {
326336
case REACT_FORWARD_REF_TYPE:
327337
register(type.render, id + '$render');
328338
break;
@@ -676,7 +686,7 @@ export function isLikelyComponentType(type: any): boolean {
676686
}
677687
case 'object': {
678688
if (type != null) {
679-
switch (type.$$typeof) {
689+
switch (getProperty(type, '$$typeof')) {
680690
case REACT_FORWARD_REF_TYPE:
681691
case REACT_MEMO_TYPE:
682692
// Definitely React components.

0 commit comments

Comments
 (0)