/******************************************************************************* uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2019-present Raymond Hill This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. Home: https://github.com/gorhill/uBlock */ import { proxyApplyFn } from './proxy-apply.js'; import { registerScriptlet } from './base.js'; import { safeSelf } from './safe-self.js'; /******************************************************************************/ function noEvalIf( needle = '' ) { if ( typeof needle !== 'string' ) { return; } const safe = safeSelf(); const logPrefix = safe.makeLogPrefix('noeval-if', needle); const reNeedle = safe.patternToRegex(needle); proxyApplyFn('eval', function(context) { const { callArgs } = context; const a = String(callArgs[0]); if ( needle !== '' && reNeedle.test(a) ) { safe.uboLog(logPrefix, 'Prevented:\n', a); return; } if ( needle === '' || safe.logLevel > 1 ) { safe.uboLog(logPrefix, 'Not prevented:\n', a); } return context.reflect(); }); } registerScriptlet(noEvalIf, { name: 'noeval-if.js', aliases: [ 'prevent-eval-if.js', ], dependencies: [ proxyApplyFn, safeSelf, ], });