1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-11-02 00:42:45 +01:00

Fix broken http header filtering

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/2552
This commit is contained in:
Raymond Hill 2023-03-21 10:22:32 -04:00
parent 285ce54d9c
commit 72cc9a8fe8
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2

View File

@ -41,13 +41,11 @@ const $exceptions = new Set();
let acceptedCount = 0;
let discardedCount = 0;
const headerIndexFromName = function(name, headers) {
let i = headers.length;
while ( i-- ) {
if ( headers[i].name.toLowerCase() === name ) {
const headerIndexFromName = function(name, headers, start = 0) {
for ( let i = start; i < headers.length; i++ ) {
if ( headers[i].name.toLowerCase() !== name ) { continue; }
return i;
}
}
return -1;
};
@ -138,7 +136,7 @@ httpheaderFilteringEngine.fromCompiledContent = function(reader) {
duplicates.add(fingerprint);
const args = reader.args();
if ( args.length < 4 ) { continue; }
filterDB.store(args[1], args[2], args[3].slice(15, -1));
filterDB.store(args[1], args[2], args[3]);
}
};
@ -175,18 +173,20 @@ httpheaderFilteringEngine.apply = function(fctxt, headers) {
const hasGlobalException = $exceptions.has('');
let modified = false;
let i = 0;
for ( const name of $headers ) {
for (;;) {
const i = headerIndexFromName(name, headers);
if ( i === -1 ) { break; }
const isExcepted = hasGlobalException || $exceptions.has(name);
if ( isExcepted ) {
if ( logger.enabled ) {
logOne(true, hasGlobalException ? '' : name, fctxt);
}
break;
continue;
}
i = 0;
for (;;) {
i = headerIndexFromName(name, headers, i);
if ( i === -1 ) { break; }
headers.splice(i, 1);
if ( logger.enabled ) {
logOne(false, name, fctxt);