Skip to content

Commit 522ed84

Browse files
committed
Sync DoS mitigations for React Flight
1 parent 8cad197 commit 522ed84

File tree

52 files changed

+16612
-9808
lines changed

Some content is hidden

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

52 files changed

+16612
-9808
lines changed

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

Lines changed: 129 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,11 @@
419419
return "$" + (iterable ? "x" : "X") + streamId.toString(16);
420420
}
421421
function resolveToJSON(key, value) {
422+
"__proto__" === key &&
423+
console.error(
424+
"Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s",
425+
describeObjectForErrorMessage(this, key)
426+
);
422427
var originalValue = this[key];
423428
"object" !== typeof originalValue ||
424429
originalValue === value ||
@@ -663,17 +668,20 @@
663668
if ("undefined" === typeof value) return "$undefined";
664669
if ("function" === typeof value) {
665670
parentReference = knownServerReferences.get(value);
666-
if (void 0 !== parentReference)
667-
return (
668-
(key = JSON.stringify(
669-
{ id: parentReference.id, bound: parentReference.bound },
670-
resolveToJSON
671-
)),
672-
null === formData && (formData = new FormData()),
673-
(parentReference = nextPartId++),
674-
formData.set(formFieldPrefix + parentReference, key),
675-
"$h" + parentReference.toString(16)
671+
if (void 0 !== parentReference) {
672+
key = writtenObjects.get(value);
673+
if (void 0 !== key) return key;
674+
key = JSON.stringify(
675+
{ id: parentReference.id, bound: parentReference.bound },
676+
resolveToJSON
676677
);
678+
null === formData && (formData = new FormData());
679+
parentReference = nextPartId++;
680+
formData.set(formFieldPrefix + parentReference, key);
681+
key = "$h" + parentReference.toString(16);
682+
writtenObjects.set(value, key);
683+
return key;
684+
}
677685
if (
678686
void 0 !== temporaryReferences &&
679687
-1 === key.indexOf(":") &&
@@ -2030,7 +2038,14 @@
20302038
}
20312039
}
20322040
}
2033-
value = value[path[i]];
2041+
var name = path[i];
2042+
if (
2043+
"object" === typeof value &&
2044+
null !== value &&
2045+
hasOwnProperty.call(value, name)
2046+
)
2047+
value = value[name];
2048+
else throw Error("Invalid reference.");
20342049
}
20352050
for (
20362051
;
@@ -2058,7 +2073,7 @@
20582073
}
20592074
}
20602075
var mappedValue = map(response, value, parentObject, key);
2061-
parentObject[key] = mappedValue;
2076+
"__proto__" !== key && (parentObject[key] = mappedValue);
20622077
"" === key && null === handler.value && (handler.value = mappedValue);
20632078
if (
20642079
parentObject[0] === REACT_ELEMENT_TYPE &&
@@ -2222,7 +2237,7 @@
22222237
metaData.id,
22232238
metaData.bound
22242239
);
2225-
parentObject[key] = resolvedValue;
2240+
"__proto__" !== key && (parentObject[key] = resolvedValue);
22262241
"" === key &&
22272242
null === handler.value &&
22282243
(handler.value = resolvedValue);
@@ -2481,20 +2496,21 @@
24812496
Object.setPrototypeOf(parentObject, model.prototype);
24822497
}
24832498
function defineLazyGetter(response, chunk, parentObject, key) {
2484-
Object.defineProperty(parentObject, key, {
2485-
get: function () {
2486-
"resolved_model" === chunk.status && initializeModelChunk(chunk);
2487-
switch (chunk.status) {
2488-
case "fulfilled":
2489-
return chunk.value;
2490-
case "rejected":
2491-
throw chunk.reason;
2492-
}
2493-
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.";
2494-
},
2495-
enumerable: !0,
2496-
configurable: !1
2497-
});
2499+
"__proto__" !== key &&
2500+
Object.defineProperty(parentObject, key, {
2501+
get: function () {
2502+
"resolved_model" === chunk.status && initializeModelChunk(chunk);
2503+
switch (chunk.status) {
2504+
case "fulfilled":
2505+
return chunk.value;
2506+
case "rejected":
2507+
throw chunk.reason;
2508+
}
2509+
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.";
2510+
},
2511+
enumerable: !0,
2512+
configurable: !1
2513+
});
24982514
return null;
24992515
}
25002516
function extractIterator(response, model) {
@@ -2698,13 +2714,14 @@
26982714
? ref.value
26992715
: defineLazyGetter(response, ref, parentObject, key);
27002716
}
2701-
Object.defineProperty(parentObject, key, {
2702-
get: function () {
2703-
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.";
2704-
},
2705-
enumerable: !0,
2706-
configurable: !1
2707-
});
2717+
"__proto__" !== key &&
2718+
Object.defineProperty(parentObject, key, {
2719+
get: function () {
2720+
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.";
2721+
},
2722+
enumerable: !0,
2723+
configurable: !1
2724+
});
27082725
return null;
27092726
default:
27102727
return (
@@ -4532,83 +4549,85 @@
45324549
}
45334550
function createFromJSONCallback(response) {
45344551
return function (key, value) {
4535-
if ("string" === typeof value)
4536-
return parseModelString(response, this, key, value);
4537-
if ("object" === typeof value && null !== value) {
4538-
if (value[0] === REACT_ELEMENT_TYPE)
4539-
b: {
4540-
var owner = value[4],
4541-
stack = value[5];
4542-
key = value[6];
4543-
value = {
4544-
$$typeof: REACT_ELEMENT_TYPE,
4545-
type: value[1],
4546-
key: value[2],
4547-
props: value[3],
4548-
_owner: void 0 === owner ? null : owner
4549-
};
4550-
Object.defineProperty(value, "ref", {
4551-
enumerable: !1,
4552-
get: nullRefGetter
4553-
});
4554-
value._store = {};
4555-
Object.defineProperty(value._store, "validated", {
4556-
configurable: !1,
4557-
enumerable: !1,
4558-
writable: !0,
4559-
value: key
4560-
});
4561-
Object.defineProperty(value, "_debugInfo", {
4562-
configurable: !1,
4563-
enumerable: !1,
4564-
writable: !0,
4565-
value: null
4566-
});
4567-
Object.defineProperty(value, "_debugStack", {
4568-
configurable: !1,
4569-
enumerable: !1,
4570-
writable: !0,
4571-
value: void 0 === stack ? null : stack
4572-
});
4573-
Object.defineProperty(value, "_debugTask", {
4574-
configurable: !1,
4575-
enumerable: !1,
4576-
writable: !0,
4577-
value: null
4578-
});
4579-
if (null !== initializingHandler) {
4580-
owner = initializingHandler;
4581-
initializingHandler = owner.parent;
4582-
if (owner.errored) {
4583-
stack = new ReactPromise("rejected", null, owner.reason);
4584-
initializeElement(response, value, null);
4585-
owner = {
4586-
name: getComponentNameFromType(value.type) || "",
4587-
owner: value._owner
4588-
};
4589-
owner.debugStack = value._debugStack;
4590-
supportsCreateTask && (owner.debugTask = value._debugTask);
4591-
stack._debugInfo = [owner];
4592-
key = createLazyChunkWrapper(stack, key);
4593-
break b;
4594-
}
4595-
if (0 < owner.deps) {
4596-
stack = new ReactPromise("blocked", null, null);
4597-
owner.value = value;
4598-
owner.chunk = stack;
4599-
key = createLazyChunkWrapper(stack, key);
4600-
value = initializeElement.bind(null, response, value, key);
4601-
stack.then(value, value);
4602-
break b;
4552+
if ("__proto__" !== key) {
4553+
if ("string" === typeof value)
4554+
return parseModelString(response, this, key, value);
4555+
if ("object" === typeof value && null !== value) {
4556+
if (value[0] === REACT_ELEMENT_TYPE)
4557+
b: {
4558+
var owner = value[4],
4559+
stack = value[5];
4560+
key = value[6];
4561+
value = {
4562+
$$typeof: REACT_ELEMENT_TYPE,
4563+
type: value[1],
4564+
key: value[2],
4565+
props: value[3],
4566+
_owner: void 0 === owner ? null : owner
4567+
};
4568+
Object.defineProperty(value, "ref", {
4569+
enumerable: !1,
4570+
get: nullRefGetter
4571+
});
4572+
value._store = {};
4573+
Object.defineProperty(value._store, "validated", {
4574+
configurable: !1,
4575+
enumerable: !1,
4576+
writable: !0,
4577+
value: key
4578+
});
4579+
Object.defineProperty(value, "_debugInfo", {
4580+
configurable: !1,
4581+
enumerable: !1,
4582+
writable: !0,
4583+
value: null
4584+
});
4585+
Object.defineProperty(value, "_debugStack", {
4586+
configurable: !1,
4587+
enumerable: !1,
4588+
writable: !0,
4589+
value: void 0 === stack ? null : stack
4590+
});
4591+
Object.defineProperty(value, "_debugTask", {
4592+
configurable: !1,
4593+
enumerable: !1,
4594+
writable: !0,
4595+
value: null
4596+
});
4597+
if (null !== initializingHandler) {
4598+
owner = initializingHandler;
4599+
initializingHandler = owner.parent;
4600+
if (owner.errored) {
4601+
stack = new ReactPromise("rejected", null, owner.reason);
4602+
initializeElement(response, value, null);
4603+
owner = {
4604+
name: getComponentNameFromType(value.type) || "",
4605+
owner: value._owner
4606+
};
4607+
owner.debugStack = value._debugStack;
4608+
supportsCreateTask && (owner.debugTask = value._debugTask);
4609+
stack._debugInfo = [owner];
4610+
key = createLazyChunkWrapper(stack, key);
4611+
break b;
4612+
}
4613+
if (0 < owner.deps) {
4614+
stack = new ReactPromise("blocked", null, null);
4615+
owner.value = value;
4616+
owner.chunk = stack;
4617+
key = createLazyChunkWrapper(stack, key);
4618+
value = initializeElement.bind(null, response, value, key);
4619+
stack.then(value, value);
4620+
break b;
4621+
}
46034622
}
4623+
initializeElement(response, value, null);
4624+
key = value;
46044625
}
4605-
initializeElement(response, value, null);
4606-
key = value;
4607-
}
4608-
else key = value;
4609-
return key;
4626+
else key = value;
4627+
return key;
4628+
}
4629+
return value;
46104630
}
4611-
return value;
46124631
};
46134632
}
46144633
function close(weakResponse) {
@@ -5000,10 +5019,10 @@
50005019
return hook.checkDCE ? !0 : !1;
50015020
})({
50025021
bundleType: 1,
5003-
version: "19.3.0-experimental-f93b9fd4-20251217",
5022+
version: "19.3.0-experimental-cbec50fd-20260122",
50045023
rendererPackageName: "react-server-dom-turbopack",
50055024
currentDispatcherRef: ReactSharedInternals,
5006-
reconcilerVersion: "19.3.0-experimental-f93b9fd4-20251217",
5025+
reconcilerVersion: "19.3.0-experimental-cbec50fd-20260122",
50075026
getCurrentComponentInfo: function () {
50085027
return currentOwnerInDEV;
50095028
}

0 commit comments

Comments
 (0)