From 49dd68ef3d4511b56b68dd9a78949a8e0814144e Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sun, 21 Jan 2024 09:26:17 -0500 Subject: [PATCH] Code review recent commit re. quoting parameters Related commit: https://github.com/gorhill/uBlock/commit/fa3a290ad40e54e90dcc7268d02b93194080e990 --- src/js/scriptlet-filtering-core.js | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/js/scriptlet-filtering-core.js b/src/js/scriptlet-filtering-core.js index e1f963d4b..021e3af30 100644 --- a/src/js/scriptlet-filtering-core.js +++ b/src/js/scriptlet-filtering-core.js @@ -98,24 +98,18 @@ const patchScriptlet = (content, arglist) => { ); }; +const requote = s => { + if ( /^(["'`]).+\1$|,/.test(s) === false ) { return s; } + if ( s.includes("'") === false ) { return `'${s}'`; } + if ( s.includes('"') === false ) { return `"${s}"`; } + if ( s.includes('`') === false ) { return `\`${s}\``; } + return `'${s.replace(/'/g, "\\'")}'`; +}; + const decompile = json => { - const args = JSON.parse(json).map(s => { - if ( /^(["'`]).+\1$/.test(s) ) { - const c0 = s.charAt(0); - const inner = s.slice(1,-1); - if ( c0 === '"' || c0 === '`' ) { - return inner.includes("'") - ? '`' + s.replace(/`/g, '\\`') + '`' - : `'${s}'`; - } - return inner.includes('"') - ? '`' + s.replace(/`/g, '\\`') + '`' - : `"${s}"`; - } - return s.replace(/,/g, '\\,'); - }); + const args = JSON.parse(json); if ( args.length === 0 ) { return '+js()'; } - return `+js(${args.join(', ')})`; + return `+js(${args.map(s => requote(s)).join(', ')})`; }; /******************************************************************************/