Skip to content

Commit bf9f084

Browse files
committed
Sync DoS mitigations for React Flight
1 parent c5de33e commit bf9f084

62 files changed

Lines changed: 18053 additions & 11456 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js

Lines changed: 127 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,11 @@
417417
return "$" + (iterable ? "x" : "X") + streamId.toString(16);
418418
}
419419
function resolveToJSON(key, value) {
420+
"__proto__" === key &&
421+
console.error(
422+
"Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s",
423+
describeObjectForErrorMessage(this, key)
424+
);
420425
var originalValue = this[key];
421426
"object" !== typeof originalValue ||
422427
originalValue === value ||
@@ -661,17 +666,20 @@
661666
if ("undefined" === typeof value) return "$undefined";
662667
if ("function" === typeof value) {
663668
parentReference = knownServerReferences.get(value);
664-
if (void 0 !== parentReference)
665-
return (
666-
(key = JSON.stringify(
667-
{ id: parentReference.id, bound: parentReference.bound },
668-
resolveToJSON
669-
)),
670-
null === formData && (formData = new FormData()),
671-
(parentReference = nextPartId++),
672-
formData.set(formFieldPrefix + parentReference, key),
673-
"$h" + parentReference.toString(16)
669+
if (void 0 !== parentReference) {
670+
key = writtenObjects.get(value);
671+
if (void 0 !== key) return key;
672+
key = JSON.stringify(
673+
{ id: parentReference.id, bound: parentReference.bound },
674+
resolveToJSON
674675
);
676+
null === formData && (formData = new FormData());
677+
parentReference = nextPartId++;
678+
formData.set(formFieldPrefix + parentReference, key);
679+
key = "$h" + parentReference.toString(16);
680+
writtenObjects.set(value, key);
681+
return key;
682+
}
675683
if (
676684
void 0 !== temporaryReferences &&
677685
-1 === key.indexOf(":") &&
@@ -1904,10 +1912,17 @@
19041912
}
19051913
}
19061914
}
1907-
value = value[path[i]];
1915+
var name = path[i];
1916+
if (
1917+
"object" === typeof value &&
1918+
null !== value &&
1919+
hasOwnProperty.call(value, name)
1920+
)
1921+
value = value[name];
1922+
else throw Error("Invalid reference.");
19081923
}
19091924
var mappedValue = map(response, value, parentObject, key);
1910-
parentObject[key] = mappedValue;
1925+
"__proto__" !== key && (parentObject[key] = mappedValue);
19111926
"" === key && null === handler.value && (handler.value = mappedValue);
19121927
if (
19131928
parentObject[0] === REACT_ELEMENT_TYPE &&
@@ -2062,7 +2077,7 @@
20622077
metaData.id,
20632078
metaData.bound
20642079
);
2065-
parentObject[key] = resolvedValue;
2080+
"__proto__" !== key && (parentObject[key] = resolvedValue);
20662081
"" === key &&
20672082
null === handler.value &&
20682083
(handler.value = resolvedValue);
@@ -2271,20 +2286,21 @@
22712286
Object.setPrototypeOf(parentObject, model.prototype);
22722287
}
22732288
function defineLazyGetter(response, chunk, parentObject, key) {
2274-
Object.defineProperty(parentObject, key, {
2275-
get: function () {
2276-
"resolved_model" === chunk.status && initializeModelChunk(chunk);
2277-
switch (chunk.status) {
2278-
case "fulfilled":
2279-
return chunk.value;
2280-
case "rejected":
2281-
throw chunk.reason;
2282-
}
2283-
return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.";
2284-
},
2285-
enumerable: !0,
2286-
configurable: !1
2287-
});
2289+
"__proto__" !== key &&
2290+
Object.defineProperty(parentObject, key, {
2291+
get: function () {
2292+
"resolved_model" === chunk.status && initializeModelChunk(chunk);
2293+
switch (chunk.status) {
2294+
case "fulfilled":
2295+
return chunk.value;
2296+
case "rejected":
2297+
throw chunk.reason;
2298+
}
2299+
return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.";
2300+
},
2301+
enumerable: !0,
2302+
configurable: !1
2303+
});
22882304
return null;
22892305
}
22902306
function extractIterator(response, model) {
@@ -2485,13 +2501,14 @@
24852501
? ref.value
24862502
: defineLazyGetter(response, ref, parentObject, key);
24872503
}
2488-
Object.defineProperty(parentObject, key, {
2489-
get: function () {
2490-
return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.";
2491-
},
2492-
enumerable: !0,
2493-
configurable: !1
2494-
});
2504+
"__proto__" !== key &&
2505+
Object.defineProperty(parentObject, key, {
2506+
get: function () {
2507+
return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.";
2508+
},
2509+
enumerable: !0,
2510+
configurable: !1
2511+
});
24952512
return null;
24962513
default:
24972514
return (
@@ -4081,82 +4098,84 @@
40814098
}
40824099
function createFromJSONCallback(response) {
40834100
return function (key, value) {
4084-
if ("string" === typeof value)
4085-
return parseModelString(response, this, key, value);
4086-
if ("object" === typeof value && null !== value) {
4087-
if (value[0] === REACT_ELEMENT_TYPE)
4088-
b: {
4089-
var owner = value[4];
4090-
key = value[5];
4091-
var validated = value[6];
4092-
value = {
4093-
$$typeof: REACT_ELEMENT_TYPE,
4094-
type: value[1],
4095-
key: value[2],
4096-
props: value[3],
4097-
_owner: void 0 === owner ? null : owner
4098-
};
4099-
Object.defineProperty(value, "ref", {
4100-
enumerable: !1,
4101-
get: nullRefGetter
4102-
});
4103-
value._store = {};
4104-
Object.defineProperty(value._store, "validated", {
4105-
configurable: !1,
4106-
enumerable: !1,
4107-
writable: !0,
4108-
value: validated
4109-
});
4110-
Object.defineProperty(value, "_debugInfo", {
4111-
configurable: !1,
4112-
enumerable: !1,
4113-
writable: !0,
4114-
value: null
4115-
});
4116-
Object.defineProperty(value, "_debugStack", {
4117-
configurable: !1,
4118-
enumerable: !1,
4119-
writable: !0,
4120-
value: void 0 === key ? null : key
4121-
});
4122-
Object.defineProperty(value, "_debugTask", {
4123-
configurable: !1,
4124-
enumerable: !1,
4125-
writable: !0,
4126-
value: null
4127-
});
4128-
if (null !== initializingHandler) {
4129-
validated = initializingHandler;
4130-
initializingHandler = validated.parent;
4131-
if (validated.errored) {
4132-
key = createErrorChunk(response, validated.reason);
4133-
initializeElement(response, value);
4134-
validated = {
4135-
name: getComponentNameFromType(value.type) || "",
4136-
owner: value._owner
4137-
};
4138-
validated.debugStack = value._debugStack;
4139-
supportsCreateTask &&
4140-
(validated.debugTask = value._debugTask);
4141-
key._debugInfo = [validated];
4142-
value = createLazyChunkWrapper(key);
4143-
break b;
4144-
}
4145-
if (0 < validated.deps) {
4146-
key = new ReactPromise("blocked", null, null);
4147-
validated.value = value;
4148-
validated.chunk = key;
4149-
value = initializeElement.bind(null, response, value);
4150-
key.then(value, value);
4151-
value = createLazyChunkWrapper(key);
4152-
break b;
4101+
if ("__proto__" !== key) {
4102+
if ("string" === typeof value)
4103+
return parseModelString(response, this, key, value);
4104+
if ("object" === typeof value && null !== value) {
4105+
if (value[0] === REACT_ELEMENT_TYPE)
4106+
b: {
4107+
var owner = value[4];
4108+
key = value[5];
4109+
var validated = value[6];
4110+
value = {
4111+
$$typeof: REACT_ELEMENT_TYPE,
4112+
type: value[1],
4113+
key: value[2],
4114+
props: value[3],
4115+
_owner: void 0 === owner ? null : owner
4116+
};
4117+
Object.defineProperty(value, "ref", {
4118+
enumerable: !1,
4119+
get: nullRefGetter
4120+
});
4121+
value._store = {};
4122+
Object.defineProperty(value._store, "validated", {
4123+
configurable: !1,
4124+
enumerable: !1,
4125+
writable: !0,
4126+
value: validated
4127+
});
4128+
Object.defineProperty(value, "_debugInfo", {
4129+
configurable: !1,
4130+
enumerable: !1,
4131+
writable: !0,
4132+
value: null
4133+
});
4134+
Object.defineProperty(value, "_debugStack", {
4135+
configurable: !1,
4136+
enumerable: !1,
4137+
writable: !0,
4138+
value: void 0 === key ? null : key
4139+
});
4140+
Object.defineProperty(value, "_debugTask", {
4141+
configurable: !1,
4142+
enumerable: !1,
4143+
writable: !0,
4144+
value: null
4145+
});
4146+
if (null !== initializingHandler) {
4147+
validated = initializingHandler;
4148+
initializingHandler = validated.parent;
4149+
if (validated.errored) {
4150+
key = createErrorChunk(response, validated.reason);
4151+
initializeElement(response, value);
4152+
validated = {
4153+
name: getComponentNameFromType(value.type) || "",
4154+
owner: value._owner
4155+
};
4156+
validated.debugStack = value._debugStack;
4157+
supportsCreateTask &&
4158+
(validated.debugTask = value._debugTask);
4159+
key._debugInfo = [validated];
4160+
value = createLazyChunkWrapper(key);
4161+
break b;
4162+
}
4163+
if (0 < validated.deps) {
4164+
key = new ReactPromise("blocked", null, null);
4165+
validated.value = value;
4166+
validated.chunk = key;
4167+
value = initializeElement.bind(null, response, value);
4168+
key.then(value, value);
4169+
value = createLazyChunkWrapper(key);
4170+
break b;
4171+
}
41534172
}
4173+
initializeElement(response, value);
41544174
}
4155-
initializeElement(response, value);
4156-
}
4175+
return value;
4176+
}
41574177
return value;
41584178
}
4159-
return value;
41604179
};
41614180
}
41624181
function close(weakResponse) {
@@ -4543,10 +4562,10 @@
45434562
return hook.checkDCE ? !0 : !1;
45444563
})({
45454564
bundleType: 1,
4546-
version: "19.2.0-experimental-7288a7d9-20251211",
4565+
version: "19.2.0-experimental-9aa4f723-20260123",
45474566
rendererPackageName: "react-server-dom-turbopack",
45484567
currentDispatcherRef: ReactSharedInternals,
4549-
reconcilerVersion: "19.2.0-experimental-7288a7d9-20251211",
4568+
reconcilerVersion: "19.2.0-experimental-9aa4f723-20260123",
45504569
getCurrentComponentInfo: function () {
45514570
return currentOwnerInDEV;
45524571
}

0 commit comments

Comments
 (0)