From 41616df866f5f87dfc0787479376f268e9722b29 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 8 Nov 2024 08:32:19 -0500 Subject: [PATCH] Improve `trusted-suppress-native-method` scriptlet Add `debug` as disposition option: if the `how` parameter is `debug`, the scriptlet will trigger a `debugger` statement and the target method won't be suppressed. Useful to find out how the method is being called by page code. To be used for investigation purpose only. --- assets/resources/scriptlets.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 8b70e48a5..900f94239 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -4432,13 +4432,10 @@ function trustedSuppressNativeMethod( safe.uboLog(logPrefix, `Arguments:\n${callArgs.join('\n')}`); return context.reflect(); } - if ( callArgs.length < signatureArgs.length ) { - return context.reflect(); - } for ( let i = 0; i < signatureArgs.length; i++ ) { const signatureArg = signatureArgs[i]; if ( signatureArg === undefined ) { continue; } - const targetArg = callArgs[i]; + const targetArg = i < callArgs.length ? callArgs[i] : undefined; if ( signatureArg.type === 'exact' ) { if ( targetArg !== signatureArg.value ) { return context.reflect(); @@ -4450,6 +4447,10 @@ function trustedSuppressNativeMethod( } } } + if ( how === 'debug' ) { + debugger; // eslint-disable-line no-debugger + return context.reflect(); + } safe.uboLog(logPrefix, `Suppressed:\n${callArgs.join('\n')}`); if ( how === 'abort' ) { throw new ReferenceError();