Skip to content
This repository was archived by the owner on Sep 9, 2022. It is now read-only.

Commit 73147d4

Browse files
committed
Merge branch 'v0.9.5.3'
* v0.9.5.3: Added support for following filter options - abort-on-property-read - abort-on-property-write - abort-current-inline-script
2 parents a15d922 + 34c3c7b commit 73147d4

8 files changed

+367
-57
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
The idea implemented from
3+
https://issues.adblockplus.org/ticket/7141
4+
*/
5+
6+
(function() {
7+
function strToRegex(s) {
8+
if (s.charAt(0) === '/' && s.slice(-1) === '/' && s.length > 2) {
9+
return new RegExp(s.slice(1, -1));
10+
}
11+
let reStr = s.replace(/[.+?${}()|[\]\\]/g, '\\$&');
12+
return new RegExp(reStr);
13+
}
14+
15+
var randomNo = Math.floor(Math.random() * 2116316160 + 60466176).toString(36);
16+
17+
function abortCurrentInlineScript(api, search = null) {
18+
let names = api.split(".");
19+
let base = window;
20+
let property;
21+
let lastproperty = names.pop();
22+
while( (property = names.shift()) !== undefined ) {
23+
base = base[property];
24+
if (!base || !(base instanceof Object)) {
25+
return;
26+
}
27+
}
28+
var descriptor = Object.getOwnPropertyDescriptor(base, lastproperty);
29+
if ( descriptor && descriptor.get !== undefined ) { return; }
30+
31+
let re = search ? strToRegex(search) : null;
32+
let rid = randomNo;
33+
let us = document.currentScript;
34+
var value = base[lastproperty];
35+
36+
function validate() {
37+
let element = document.currentScript;
38+
if (element instanceof HTMLScriptElement && element.src == "" &&
39+
element != us && (!re || re.test(element.textContent)))
40+
{
41+
throw new ReferenceError(rid);
42+
}
43+
}
44+
45+
Object.defineProperty(base, lastproperty, {
46+
get() { validate(); return value; },
47+
set(newValue) {
48+
validate();
49+
value = newValue;
50+
},
51+
configurable: true
52+
});
53+
var onerror = window.onerror;
54+
window.onerror = function(message, source, lineno, colno, error) {
55+
if ( typeof message === 'string' && message.indexOf(randomNo) !== -1 ) {
56+
return true;
57+
}
58+
if (typeof onerror == "function")
59+
return onerror(message, source, lineno, colno, error);
60+
};
61+
}
62+
abortCurrentInlineScript("{{1}}","{{2}}");
63+
})();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
The idea implemented from
3+
https://issues.adblockplus.org/ticket/6969
4+
*/
5+
6+
(function() {
7+
let createProxy = function(object, property, descriptor) {
8+
let pos = property.indexOf(".");
9+
if(pos === -1) {
10+
let objDescriptor = Object.getOwnPropertyDescriptor(object, property);
11+
if (objDescriptor && !objDescriptor.configurable)
12+
return;
13+
14+
Object.defineProperty(object, property, Object.assign({}, descriptor, {configurable: true}));
15+
return true;
16+
} else {
17+
let property1 = property.slice(0, pos);
18+
let propertyRemaining = property.slice(pos + 1);
19+
let value = object[property1];
20+
if (value && (value instanceof Object)) {
21+
createProxy(value, propertyRemaining, descriptor);
22+
return;
23+
}
24+
25+
let objDescriptor = Object.getOwnPropertyDescriptor(object, property1);
26+
if (objDescriptor && !objDescriptor.configurable)
27+
return;
28+
29+
Object.defineProperty(object, property1, {
30+
get() { return value; },
31+
set(newValue) { value = newValue; if ( newValue instanceof Object ) {
32+
createProxy(newValue, propertyRemaining, descriptor);
33+
}},
34+
configurable: true
35+
});
36+
}
37+
}
38+
39+
let randomNo = Math.floor(Math.random() * 2116316160 + 60466176).toString(36);
40+
let abort = function() {
41+
throw new ReferenceError(randomNo);
42+
}
43+
var onerror = window.onerror;
44+
window.onerror = function(message, source, lineno, colno, error) {
45+
if( typeof message === 'string' && message.indexOf(randomNo) !== -1 ) {
46+
return true;
47+
}
48+
if(typeof onerror == "function")
49+
return onerror(message, source, lineno, colno, error);
50+
};
51+
createProxy(window, '{{1}}', {get: abort, set: function(){}});
52+
})();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
The idea implemented from
3+
https://issues.adblockplus.org/ticket/7207
4+
*/
5+
6+
(function() {
7+
var createProxy = function(object, property, descriptor) {
8+
let pos = property.indexOf(".");
9+
if(pos === -1) {
10+
let objDescriptor = Object.getOwnPropertyDescriptor(object, property);
11+
if (objDescriptor && !objDescriptor.configurable)
12+
return;
13+
14+
Object.defineProperty(object, property, Object.assign({}, descriptor, {configurable: true}));
15+
return true;
16+
} else {
17+
let property1 = property.slice(0, pos);
18+
let propertyRemaining = property.slice(pos + 1);
19+
let value = object[property1];
20+
if (value && (value instanceof Object)) {
21+
createProxy(value, propertyRemaining, descriptor);
22+
return;
23+
}
24+
let objDescriptor = Object.getOwnPropertyDescriptor(object, property1);
25+
if (objDescriptor && !objDescriptor.configurable)
26+
return;
27+
28+
Object.defineProperty(object, property1, {
29+
get() { return value; },
30+
set(newValue) { value = newValue; if ( newValue instanceof Object ) {
31+
createProxy(newValue, propertyRemaining, descriptor);
32+
}},
33+
configurable: true
34+
});
35+
}
36+
}
37+
38+
var randomNo = Math.floor(Math.random() * 2116316160 + 60466176).toString(36);
39+
var abort = function() {
40+
throw new ReferenceError(randomNo);
41+
}
42+
var onerror = window.onerror;
43+
window.onerror = function(message, source, lineno, colno, error) {
44+
if ( typeof message === 'string' && message.indexOf(randomNo) !== -1 ) {
45+
return true;
46+
}
47+
if (typeof onerror == "function")
48+
return onerror(message, source, lineno, colno, error);
49+
};
50+
createProxy(window, '{{1}}', {set: abort});
51+
})();

platform/chromium/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": 2,
33

44
"name": "uBlock",
5-
"version": "0.9.5.18",
5+
"version": "0.9.5.19",
66

77
"default_locale": "en",
88
"description": "__MSG_extShortDesc__",

src/js/background.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ return {
9191

9292
// read-only
9393
systemSettings: {
94-
compiledMagic: 'wertpszukpsddd',
95-
selfieMagic: 'werthiasrsddd'
94+
compiledMagic: 'wertpszukpseee',
95+
selfieMagic: 'werthiasrseee'
9696
},
9797
restoreBackupSettings: {
9898
lastRestoreFile: '',

0 commit comments

Comments
 (0)