Skip to content

Commit 804a596

Browse files
author
Atlassian Bamboo
committed
deploy: update dist v1.9.96
1 parent 3556089 commit 804a596

File tree

6 files changed

+371
-33
lines changed

6 files changed

+371
-33
lines changed

dist/build.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=1.9.91
1+
version=1.9.96

dist/redirects.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#
22
# AdGuard Scriptlets (Redirects Source)
3-
# Version 1.9.91
3+
# Version 1.9.96
44
#
55
- title: 1x1-transparent.gif
66
added: v1.0.4

dist/scriptlets.corelibs.json

Lines changed: 4 additions & 4 deletions
Large diffs are not rendered by default.

dist/scriptlets.js

Lines changed: 172 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
/**
33
* AdGuard Scriptlets
4-
* Version 1.9.91
4+
* Version 1.9.96
55
*/
66

77
(function () {
@@ -2026,7 +2026,17 @@
20262026
*/
20272027
var removeStorageItem = function removeStorageItem(source, storage, key) {
20282028
try {
2029-
storage.removeItem(key);
2029+
if (key.startsWith('/') && (key.endsWith('/') || key.endsWith('/i')) && isValidStrPattern(key)) {
2030+
var regExpKey = toRegExp(key);
2031+
var storageKeys = Object.keys(storage);
2032+
storageKeys.forEach(function (storageKey) {
2033+
if (regExpKey.test(storageKey)) {
2034+
storage.removeItem(storageKey);
2035+
}
2036+
});
2037+
} else {
2038+
storage.removeItem(key);
2039+
}
20302040
} catch (e) {
20312041
var message = "Unable to remove storage item due to: ".concat(e.message);
20322042
logMessage(source, message);
@@ -3724,7 +3734,7 @@
37243734
* ### Syntax
37253735
*
37263736
* ```text
3727-
* example.org#%#//scriptlet('set-constant', property, value[, stack])
3737+
* example.org#%#//scriptlet('set-constant', property, value[, stack,[ valueWrapper[, setProxyTrap]]])
37283738
* ```
37293739
*
37303740
* - `property` — required, path to a property (joined with `.` if needed). The property must be attached to `window`.
@@ -3755,6 +3765,7 @@
37553765
* - `asCallback` – function returning callback, that would return value
37563766
* - `asResolved` – Promise that would resolve with value
37573767
* - `asRejected` – Promise that would reject with value
3768+
* - `setProxyTrap` – optional, boolean, if set to true, proxy trap will be set on the object
37583769
*
37593770
* ### Examples
37603771
*
@@ -3794,12 +3805,22 @@
37943805
* ✔ document.fifth.catch((reason) => reason === 42) // promise rejects with specified number
37953806
* ```
37963807
*
3808+
* ```adblock
3809+
* ! Any access to `window.foo.bar` will return `false` and the proxy trap will be set on the `foo` object
3810+
* ! It may be required in the case when `foo` object is overwritten by website script
3811+
* ! Related to this issue - https://github.com/AdguardTeam/Scriptlets/issues/330
3812+
* example.org#%#//scriptlet('set-constant', 'foo.bar', 'false', '', '', 'true')
3813+
*
3814+
* ✔ window.foo.bar === false
3815+
* ```
3816+
*
37973817
* @added v1.0.4.
37983818
*/
37993819
/* eslint-enable max-len */
38003820
function setConstant$1(source, property, value) {
38013821
var stack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
38023822
var valueWrapper = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
3823+
var setProxyTrap = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
38033824
var uboAliases = ['set-constant.js', 'ubo-set-constant.js', 'set.js', 'ubo-set.js', 'ubo-set-constant', 'ubo-set'];
38043825

38053826
/**
@@ -3961,7 +3982,7 @@
39613982
// Get properties which should be checked and remove first one
39623983
// because it's current object
39633984
var propertiesToCheck = property.split('.').slice(1);
3964-
if (!isProxyTrapSet) {
3985+
if (setProxyTrap && !isProxyTrapSet) {
39653986
isProxyTrapSet = true;
39663987
a = new Proxy(a, {
39673988
get: function get(target, propertyKey, val) {
@@ -6532,7 +6553,8 @@
65326553
* example.com#%#//scriptlet('set-local-storage-item', 'key', 'value')
65336554
* ```
65346555
*
6535-
* - `key` — required, key name to be set.
6556+
* - `key` — required, key name to be set. Should be a string for setting,
6557+
* but it also can be a regular expression for removing items from localStorage.
65366558
* - `value` — required, key value; possible values:
65376559
* - positive decimal integer `<= 32767`
65386560
* - one of the predefined constants in any case variation:
@@ -6558,6 +6580,9 @@
65586580
*
65596581
* ! Removes the item with key 'foo' from local storage
65606582
* example.org#%#//scriptlet('set-local-storage-item', 'foo', '$remove$')
6583+
*
6584+
* ! Removes from local storage all items whose key matches the regular expression `/mp_.*_mixpanel/`
6585+
* example.org#%#//scriptlet('set-local-storage-item', '/mp_.*_mixpanel/', '$remove$')
65616586
* ```
65626587
*
65636588
* @added v1.4.3.
@@ -6588,7 +6613,9 @@
65886613
setLocalStorageItem$1.names = ['set-local-storage-item',
65896614
// aliases are needed for matching the related scriptlet converted into our syntax
65906615
'set-local-storage-item.js', 'ubo-set-local-storage-item.js', 'ubo-set-local-storage-item'];
6591-
setLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, removeStorageItem, getLimitedStorageItemValue];
6616+
setLocalStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, removeStorageItem, getLimitedStorageItemValue,
6617+
// following helpers are needed for helpers above
6618+
isValidStrPattern, toRegExp, escapeRegExp];
65926619

65936620
/* eslint-disable max-len */
65946621
/**
@@ -6609,7 +6636,8 @@
66096636
* example.com#%#//scriptlet('set-session-storage-item', 'key', 'value')
66106637
* ```
66116638
*
6612-
* - `key` — required, key name to be set.
6639+
* - `key` — required, key name to be set. Should be a string for setting,
6640+
* but it also can be a regular expression for removing items from localStorage.
66136641
* - `value` — required, key value; possible values:
66146642
* - positive decimal integer `<= 32767`
66156643
* - one of the predefined constants in any case variation:
@@ -6635,6 +6663,9 @@
66356663
*
66366664
* ! Removes the item with key 'foo' from session storage
66376665
* example.org#%#//scriptlet('set-session-storage-item', 'foo', '$remove$')
6666+
*
6667+
* ! Removes from session storage all items whose key matches the regular expression `/mp_.*_mixpanel/`
6668+
* example.org#%#//scriptlet('set-session-storage-item', '/mp_.*_mixpanel/', '$remove$')
66386669
* ```
66396670
*
66406671
* @added v1.4.3.
@@ -6665,7 +6696,9 @@
66656696
setSessionStorageItem$1.names = ['set-session-storage-item',
66666697
// aliases are needed for matching the related scriptlet converted into our syntax
66676698
'set-session-storage-item.js', 'ubo-set-session-storage-item.js', 'ubo-set-session-storage-item'];
6668-
setSessionStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, removeStorageItem, getLimitedStorageItemValue];
6699+
setSessionStorageItem$1.injections = [hit, logMessage, nativeIsNaN, setStorageItem, removeStorageItem, getLimitedStorageItemValue,
6700+
// following helpers are needed for helpers above
6701+
isValidStrPattern, toRegExp, escapeRegExp];
66696702

66706703
/* eslint-disable max-len */
66716704
/**
@@ -9922,7 +9955,7 @@
99229955
* example.org#%#//scriptlet('trusted-prune-inbound-object', 'JSON.stringify', '', 'bar', '')
99239956
* ```
99249957
*
9925-
* @added unknown.
9958+
* @added v1.9.91.
99269959
*/
99279960
/* eslint-enable max-len */
99289961
function trustedPruneInboundObject$1(source, functionName, propsToRemove, requiredInitialProps) {
@@ -24458,6 +24491,7 @@
2445824491
function setConstant(source, property, value) {
2445924492
var stack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
2446024493
var valueWrapper = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
24494+
var setProxyTrap = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
2446124495
var uboAliases = ["set-constant.js", "ubo-set-constant.js", "set.js", "ubo-set.js", "ubo-set-constant", "ubo-set"];
2446224496
if (uboAliases.includes(source.name)) {
2446324497
if (stack.length !== 1 && !getNumberFromString(stack)) {
@@ -24579,7 +24613,7 @@
2457924613
}
2458024614
if (a instanceof Object) {
2458124615
var propertiesToCheck = property.split(".").slice(1);
24582-
if (!isProxyTrapSet) {
24616+
if (setProxyTrap && !isProxyTrapSet) {
2458324617
isProxyTrapSet = true;
2458424618
a = new Proxy(a, {
2458524619
get: function get(target, propertyKey, val) {
@@ -25258,7 +25292,17 @@
2525825292
}
2525925293
function removeStorageItem(source, storage, key) {
2526025294
try {
25261-
storage.removeItem(key);
25295+
if (key.startsWith("/") && (key.endsWith("/") || key.endsWith("/i")) && isValidStrPattern(key)) {
25296+
var regExpKey = toRegExp(key);
25297+
var storageKeys = Object.keys(storage);
25298+
storageKeys.forEach(function (storageKey) {
25299+
if (regExpKey.test(storageKey)) {
25300+
storage.removeItem(storageKey);
25301+
}
25302+
});
25303+
} else {
25304+
storage.removeItem(key);
25305+
}
2526225306
} catch (e) {
2526325307
var message = "Unable to remove storage item due to: ".concat(e.message);
2526425308
logMessage(source, message);
@@ -25291,6 +25335,59 @@
2529125335
}
2529225336
return validValue;
2529325337
}
25338+
function isValidStrPattern(input) {
25339+
var FORWARD_SLASH = "/";
25340+
var str = escapeRegExp(input);
25341+
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
25342+
str = input.slice(1, -1);
25343+
}
25344+
var isValid;
25345+
try {
25346+
isValid = new RegExp(str);
25347+
isValid = true;
25348+
} catch (e) {
25349+
isValid = false;
25350+
}
25351+
return isValid;
25352+
}
25353+
function toRegExp() {
25354+
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
25355+
var DEFAULT_VALUE = ".?";
25356+
var FORWARD_SLASH = "/";
25357+
if (input === "") {
25358+
return new RegExp(DEFAULT_VALUE);
25359+
}
25360+
var delimiterIndex = input.lastIndexOf(FORWARD_SLASH);
25361+
var flagsPart = input.substring(delimiterIndex + 1);
25362+
var regExpPart = input.substring(0, delimiterIndex + 1);
25363+
var isValidRegExpFlag = function isValidRegExpFlag(flag) {
25364+
if (!flag) {
25365+
return false;
25366+
}
25367+
try {
25368+
new RegExp("", flag);
25369+
return true;
25370+
} catch (ex) {
25371+
return false;
25372+
}
25373+
};
25374+
var getRegExpFlags = function getRegExpFlags(regExpStr, flagsStr) {
25375+
if (regExpStr.startsWith(FORWARD_SLASH) && regExpStr.endsWith(FORWARD_SLASH) && !regExpStr.endsWith("\\/") && isValidRegExpFlag(flagsStr)) {
25376+
return flagsStr;
25377+
}
25378+
return "";
25379+
};
25380+
var flags = getRegExpFlags(regExpPart, flagsPart);
25381+
if (input.startsWith(FORWARD_SLASH) && input.endsWith(FORWARD_SLASH) || flags) {
25382+
var regExpInput = flags ? regExpPart : input;
25383+
return new RegExp(regExpInput.slice(1, -1), flags);
25384+
}
25385+
var escaped = input.replace(/\\'/g, "'").replace(/\\"/g, '"').replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
25386+
return new RegExp(escaped);
25387+
}
25388+
function escapeRegExp(str) {
25389+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
25390+
}
2529425391
var updatedArgs = args ? [].concat(source).concat(args) : [source];
2529525392
try {
2529625393
setLocalStorageItem.apply(this, updatedArgs);
@@ -25435,7 +25532,17 @@
2543525532
}
2543625533
function removeStorageItem(source, storage, key) {
2543725534
try {
25438-
storage.removeItem(key);
25535+
if (key.startsWith("/") && (key.endsWith("/") || key.endsWith("/i")) && isValidStrPattern(key)) {
25536+
var regExpKey = toRegExp(key);
25537+
var storageKeys = Object.keys(storage);
25538+
storageKeys.forEach(function (storageKey) {
25539+
if (regExpKey.test(storageKey)) {
25540+
storage.removeItem(storageKey);
25541+
}
25542+
});
25543+
} else {
25544+
storage.removeItem(key);
25545+
}
2543925546
} catch (e) {
2544025547
var message = "Unable to remove storage item due to: ".concat(e.message);
2544125548
logMessage(source, message);
@@ -25468,6 +25575,59 @@
2546825575
}
2546925576
return validValue;
2547025577
}
25578+
function isValidStrPattern(input) {
25579+
var FORWARD_SLASH = "/";
25580+
var str = escapeRegExp(input);
25581+
if (input[0] === FORWARD_SLASH && input[input.length - 1] === FORWARD_SLASH) {
25582+
str = input.slice(1, -1);
25583+
}
25584+
var isValid;
25585+
try {
25586+
isValid = new RegExp(str);
25587+
isValid = true;
25588+
} catch (e) {
25589+
isValid = false;
25590+
}
25591+
return isValid;
25592+
}
25593+
function toRegExp() {
25594+
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
25595+
var DEFAULT_VALUE = ".?";
25596+
var FORWARD_SLASH = "/";
25597+
if (input === "") {
25598+
return new RegExp(DEFAULT_VALUE);
25599+
}
25600+
var delimiterIndex = input.lastIndexOf(FORWARD_SLASH);
25601+
var flagsPart = input.substring(delimiterIndex + 1);
25602+
var regExpPart = input.substring(0, delimiterIndex + 1);
25603+
var isValidRegExpFlag = function isValidRegExpFlag(flag) {
25604+
if (!flag) {
25605+
return false;
25606+
}
25607+
try {
25608+
new RegExp("", flag);
25609+
return true;
25610+
} catch (ex) {
25611+
return false;
25612+
}
25613+
};
25614+
var getRegExpFlags = function getRegExpFlags(regExpStr, flagsStr) {
25615+
if (regExpStr.startsWith(FORWARD_SLASH) && regExpStr.endsWith(FORWARD_SLASH) && !regExpStr.endsWith("\\/") && isValidRegExpFlag(flagsStr)) {
25616+
return flagsStr;
25617+
}
25618+
return "";
25619+
};
25620+
var flags = getRegExpFlags(regExpPart, flagsPart);
25621+
if (input.startsWith(FORWARD_SLASH) && input.endsWith(FORWARD_SLASH) || flags) {
25622+
var regExpInput = flags ? regExpPart : input;
25623+
return new RegExp(regExpInput.slice(1, -1), flags);
25624+
}
25625+
var escaped = input.replace(/\\'/g, "'").replace(/\\"/g, '"').replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
25626+
return new RegExp(escaped);
25627+
}
25628+
function escapeRegExp(str) {
25629+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
25630+
}
2547125631
var updatedArgs = args ? [].concat(source).concat(args) : [source];
2547225632
try {
2547325633
setSessionStorageItem.apply(this, updatedArgs);

0 commit comments

Comments
 (0)