Add trusted-prune-inbound-object scriptlet · gorhill/uBlock@1c9da22 (original) (raw)

`@@ -1429,42 +1429,6 @@ function jsonPrune(

`

1429

1429

`});

`

1430

1430

`}

`

1431

1431

``

1432

``

`-

/******************************************************************************/

`

1433

``

-

1434

``

`-

builtinScriptlets.push({

`

1435

``

`-

name: 'json-prune-stringify.js',

`

1436

``

`-

fn: jsonPruneStringify,

`

1437

``

`-

dependencies: [

`

1438

``

`-

'object-prune.fn',

`

1439

``

`-

'safe-self.fn',

`

1440

``

`-

],

`

1441

``

`-

});

`

1442

``

`-

function jsonPruneStringify(

`

1443

``

`-

rawPrunePaths = '',

`

1444

``

`-

rawNeedlePaths = '',

`

1445

``

`-

stackNeedle = ''

`

1446

``

`-

) {

`

1447

``

`-

const safe = safeSelf();

`

1448

``

`-

const stackNeedleDetails = safe.initPattern(stackNeedle, { canNegate: true });

`

1449

``

`-

const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);

`

1450

``

`-

JSON.stringify = new Proxy(JSON.stringify, {

`

1451

``

`-

apply: function(target, thisArg, args) {

`

1452

``

`-

const objBefore = args[0];

`

1453

``

`-

if ( objBefore instanceof Object ) {

`

1454

``

`-

const objAfter = objectPruneFn(

`

1455

``

`-

objBefore,

`

1456

``

`-

rawPrunePaths,

`

1457

``

`-

rawNeedlePaths,

`

1458

``

`-

stackNeedleDetails,

`

1459

``

`-

extraArgs

`

1460

``

`-

);

`

1461

``

`-

args[0] = objAfter || objBefore;

`

1462

``

`-

}

`

1463

``

`-

return Reflect.apply(target, thisArg, args);

`

1464

``

`-

},

`

1465

``

`-

});

`

1466

``

`-

}

`

1467

``

-

1468

1432

`/*******************************************************************************

`

1469

1433

` *

`

1470

1434

` * json-prune-fetch-response.js

`

`@@ -4071,3 +4035,59 @@ function trustedClickElement(

`

4071

4035

`}

`

4072

4036

``

4073

4037

`/******************************************************************************/

`

``

4038

+

``

4039

`+

builtinScriptlets.push({

`

``

4040

`+

name: 'trusted-prune-inbound-object.js',

`

``

4041

`+

requiresTrust: true,

`

``

4042

`+

fn: trustedPruneInboundObject,

`

``

4043

`+

dependencies: [

`

``

4044

`+

'object-prune.fn',

`

``

4045

`+

'safe-self.fn',

`

``

4046

`+

],

`

``

4047

`+

});

`

``

4048

`+

function trustedPruneInboundObject(

`

``

4049

`+

entryPoint = '',

`

``

4050

`+

argPos = '',

`

``

4051

`+

rawPrunePaths = '',

`

``

4052

`+

rawNeedlePaths = ''

`

``

4053

`+

) {

`

``

4054

`+

if ( entryPoint === '' ) { return; }

`

``

4055

`+

let context = globalThis;

`

``

4056

`+

let prop = entryPoint;

`

``

4057

`+

for (;;) {

`

``

4058

`+

const pos = prop.indexOf('.');

`

``

4059

`+

if ( pos === -1 ) { break; }

`

``

4060

`+

context = context[prop.slice(0, pos)];

`

``

4061

`+

if ( context instanceof Object === false ) { return; }

`

``

4062

`+

prop = prop.slice(pos+1);

`

``

4063

`+

}

`

``

4064

`+

if ( typeof context[prop] !== 'function' ) { return; }

`

``

4065

`+

const argIndex = parseInt(argPos);

`

``

4066

`+

if ( isNaN(argIndex) ) { return; }

`

``

4067

`+

if ( argIndex < 1 ) { return; }

`

``

4068

`+

const safe = safeSelf();

`

``

4069

`+

const extraArgs = safe.getExtraArgs(Array.from(arguments), 4);

`

``

4070

`+

context[prop] = new Proxy(context[prop], {

`

``

4071

`+

apply: function(target, thisArg, args) {

`

``

4072

`+

const targetArg = argIndex <= args.length

`

``

4073

`+

? args[argIndex-1]

`

``

4074

`+

: undefined;

`

``

4075

`+

if ( targetArg instanceof Object ) {

`

``

4076

`+

const objBefore = extraArgs.dontOverwrite

`

``

4077

`+

? safe.JSON_parse(safe.JSON_stringify(targetArg))

`

``

4078

`+

: targetArg;

`

``

4079

`+

const objAfter = objectPruneFn(

`

``

4080

`+

objBefore,

`

``

4081

`+

rawPrunePaths,

`

``

4082

`+

rawNeedlePaths,

`

``

4083

`+

{ matchAll: true },

`

``

4084

`+

extraArgs

`

``

4085

`+

);

`

``

4086

`+

args[argIndex-1] = objAfter || objBefore;

`

``

4087

`+

}

`

``

4088

`+

return Reflect.apply(target, thisArg, args);

`

``

4089

`+

},

`

``

4090

`+

});

`

``

4091

`+

}

`

``

4092

+

``

4093

`+

/******************************************************************************/

`