mirror of
https://github.com/denoland/deno.git
synced 2025-07-24 05:35:33 +00:00
fix(ext/fetch): new Request should soft clone (#16869)
Previously the inner request object of the original and the new request were the same, causing the requests to be entangled and mutable changes to one to be visible to the other. This fixes that.
This commit is contained in:
parent
3973ceb634
commit
923370f18f
3 changed files with 33 additions and 12 deletions
|
@ -157,14 +157,14 @@
|
|||
* @param {InnerRequest} request
|
||||
* @returns {InnerRequest}
|
||||
*/
|
||||
function cloneInnerRequest(request) {
|
||||
function cloneInnerRequest(request, skipBody = false) {
|
||||
const headerList = ArrayPrototypeMap(
|
||||
request.headerList,
|
||||
(x) => [x[0], x[1]],
|
||||
);
|
||||
|
||||
let body = null;
|
||||
if (request.body !== null) {
|
||||
if (request.body !== null && !skipBody) {
|
||||
body = request.body.clone();
|
||||
}
|
||||
|
||||
|
@ -315,12 +315,14 @@
|
|||
if (!ObjectPrototypeIsPrototypeOf(RequestPrototype, input)) {
|
||||
throw new TypeError("Unreachable");
|
||||
}
|
||||
request = input[_request];
|
||||
const originalReq = input[_request];
|
||||
// fold in of step 12 from below
|
||||
request = cloneInnerRequest(originalReq, true);
|
||||
request.redirectCount = 0; // reset to 0 - cloneInnerRequest copies the value
|
||||
signal = input[_signal];
|
||||
}
|
||||
|
||||
// 12.
|
||||
// TODO(lucacasonato): create a copy of `request`
|
||||
// 12. is folded into the else statement of step 6 above.
|
||||
|
||||
// 22.
|
||||
if (init.redirect !== undefined) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue