From 8be8ac57a7b584e63e5286ae01d318d779d543a8 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 27 Jan 2024 06:43:36 -0500 Subject: [PATCH] Bring back ability to log all calls to `JSON.parse` Related feedback: https://github.com/uBlockOrigin/uBlock-issues/discussions/3096 --- assets/resources/scriptlets.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 5c1279f9d..2da1fa277 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -427,7 +427,7 @@ function abortCurrentScriptCore( if ( debug === 'nomatch' || debug === 'all' ) { debugger; } // jshint ignore: line return; } - if ( safe.logLevel > 1 && e.src !== '' ) { + if ( safe.logLevel > 1 && context !== '' ) { safe.uboLog(logPrefix, `Matched src\n${e.src}`); } const scriptText = getScriptText(e); @@ -1659,19 +1659,28 @@ function jsonPrune( stackNeedle = '' ) { const safe = safeSelf(); + const logPrefix = safe.makeLogPrefix('json-prune', rawPrunePaths, rawNeedlePaths, stackNeedle); const stackNeedleDetails = safe.initPattern(stackNeedle, { canNegate: true }); const extraArgs = safe.getExtraArgs(Array.from(arguments), 3); JSON.parse = new Proxy(JSON.parse, { apply: function(target, thisArg, args) { const objBefore = Reflect.apply(target, thisArg, args); + if ( rawPrunePaths === '' ) { + safe.uboLog(logPrefix, JSON.stringify(objBefore, null, 1)); + } const objAfter = objectPruneFn( objBefore, rawPrunePaths, rawNeedlePaths, stackNeedleDetails, 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; }, }); }