1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-07-08 04:49:12 +02:00

Bring back ability to log all calls to JSON.parse

Related feedback:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3096
This commit is contained in:
Raymond Hill 2024-01-27 06:43:36 -05:00
parent 0df57e08d2
commit 8be8ac57a7
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2

View File

@ -427,7 +427,7 @@ function abortCurrentScriptCore(
if ( debug === 'nomatch' || debug === 'all' ) { debugger; } // jshint ignore: line if ( debug === 'nomatch' || debug === 'all' ) { debugger; } // jshint ignore: line
return; return;
} }
if ( safe.logLevel > 1 && e.src !== '' ) { if ( safe.logLevel > 1 && context !== '' ) {
safe.uboLog(logPrefix, `Matched src\n${e.src}`); safe.uboLog(logPrefix, `Matched src\n${e.src}`);
} }
const scriptText = getScriptText(e); const scriptText = getScriptText(e);
@ -1659,19 +1659,28 @@ function jsonPrune(
stackNeedle = '' stackNeedle = ''
) { ) {
const safe = safeSelf(); const safe = safeSelf();
const logPrefix = safe.makeLogPrefix('json-prune', rawPrunePaths, rawNeedlePaths, stackNeedle);
const stackNeedleDetails = safe.initPattern(stackNeedle, { canNegate: true }); const stackNeedleDetails = safe.initPattern(stackNeedle, { canNegate: true });
const extraArgs = safe.getExtraArgs(Array.from(arguments), 3); const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
JSON.parse = new Proxy(JSON.parse, { JSON.parse = new Proxy(JSON.parse, {
apply: function(target, thisArg, args) { apply: function(target, thisArg, args) {
const objBefore = Reflect.apply(target, thisArg, args); const objBefore = Reflect.apply(target, thisArg, args);
if ( rawPrunePaths === '' ) {
safe.uboLog(logPrefix, JSON.stringify(objBefore, null, 1));
}
const objAfter = objectPruneFn( const objAfter = objectPruneFn(
objBefore, objBefore,
rawPrunePaths, rawPrunePaths,
rawNeedlePaths, rawNeedlePaths,
stackNeedleDetails, stackNeedleDetails,
extraArgs extraArgs
); );
return objAfter || objBefore; if ( objAfter === undefined ) { return objBefore; }
safe.uboLog(logPrefix, 'Pruned');
if ( safe.logLevel > 1 ) {
safe.uboLog(logPrefix, JSON.stringify(objAfter, null, 1));
}
return objAfter;
}, },
}); });
} }