Skip to content

Commit a9a03f4

Browse files
committed
[TabGuard] Avoid infinite redirection loops.
1 parent b0190cb commit a9a03f4

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

src/bg/RequestGuard.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,11 @@ var RequestGuard = (() => {
556556
let lanRes = checkLANRequest(request);
557557
if (!UA.isMozilla) return lanRes; // Chromium doesn't support async blocking suspension, stop here
558558
if (lanRes === ABORT) return ABORT;
559+
// redirection loop test
560+
let pending = pendingRequests.get(request.requestId);
561+
if (pending && pending.redirected && pending.redirected.url === request.url) {
562+
return lanRes; // don't go on stripping cookies if we're in a redirection loop
563+
}
559564
let chainNext = r => r === ABORT ? r : TabGuard.check(request);
560565
return lanRes instanceof Promise ? lanRes.then(chainNext) : chainNext(lanRes);
561566
},

src/bg/TabGuard.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ var TabGuard = (() => {
4444
return flat;
4545
}
4646

47-
let cutRequestIds = new Set();
47+
let scheduledCuts = new Set();
4848

4949
return {
5050
forget,
@@ -65,11 +65,11 @@ var TabGuard = (() => {
6565
let headers = flattenHeaders(requestHeaders);
6666
if (headers["sec-fetch-user"] === "?1" && /^(?:same-(?:site|origin)|none)$/i.test(headers["sec-fetch-site"])) {
6767
debug("[TabGuard] User-typed, bookmark, reload or user-activated same-site navigation: scheduling tab ties cut.", tabId, request);
68-
cutRequestIds.add(tabId);
68+
scheduledCuts.add(request.requestId);
6969
return;
7070
} else {
7171
debug("[TabGuard] Automatic or cross-site navigation, keeping tab ties.", tabId, request);
72-
cutRequestIds.delete(tabId);
72+
scheduledCuts.delete(request.requestId);
7373
}
7474
}
7575

@@ -130,8 +130,8 @@ var TabGuard = (() => {
130130
},
131131
postCheck(request) {
132132
let {requestId, tabId} = request;
133-
if (cutRequestIds.has(requestId)) {
134-
cutRequestIds.remove(requestId);
133+
if (scheduledCuts.has(requestId)) {
134+
scheduledCuts.delete(requestId);
135135
TabTies.cut(tabId);
136136
}
137137
},

0 commit comments

Comments
 (0)