Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Unified Diff: Source/core/inspector/InjectedScriptSource.js

Issue 445333005: DevTools: Fix tainted Function.prototype methods may disable console. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: another test fix Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InjectedScriptSource.js
diff --git a/Source/core/inspector/InjectedScriptSource.js b/Source/core/inspector/InjectedScriptSource.js
index cf1868f09ce46db10724b89fbbcbb86c6c693ac9..9f58f9d06a49deecb211d20718a5f0034f3185c5 100644
--- a/Source/core/inspector/InjectedScriptSource.js
+++ b/Source/core/inspector/InjectedScriptSource.js
@@ -118,7 +118,7 @@ function bind(func, thisObject, var_args)
*/
function bound(var_args)
{
- return func.apply(thisObject, concat(args, slice(arguments)));
+ return InjectedScriptHost.callFunction(func, thisObject, concat(args, slice(arguments)));
}
bound.toString = function()
{
@@ -151,7 +151,7 @@ function isArrayLike(obj)
return false;
if (typeof obj.splice === "function")
return isFinite(obj.length);
- var str = Object.prototype.toString.call(obj);
+ var str = InjectedScriptHost.callFunction(Object.prototype.toString, obj);
if (str === "[object Array]" ||
str === "[object Arguments]" ||
str === "[object HTMLCollection]" ||
@@ -377,7 +377,7 @@ InjectedScript.prototype = {
dispatch: function(methodName, args)
{
var argsArray = InjectedScriptHost.eval("(" + args + ")");
- var result = this[methodName].apply(this, argsArray);
+ var result = InjectedScriptHost.callFunction(this[methodName], this, argsArray);
if (typeof result === "undefined") {
inspectedWindow.console.error("Web Inspector error: InjectedScript.%s returns undefined", methodName);
result = null;
@@ -518,7 +518,7 @@ InjectedScript.prototype = {
try {
propertyProcessed[property] = true;
- var descriptor = nullifyObjectProto(InjectedScriptHost.suppressWarningsAndCall(Object, Object.getOwnPropertyDescriptor, o, property));
+ var descriptor = nullifyObjectProto(InjectedScriptHost.suppressWarningsAndCallFunction(Object.getOwnPropertyDescriptor, Object, [o, property]));
if (descriptor) {
if (accessorPropertiesOnly && !("get" in descriptor || "set" in descriptor))
continue;
@@ -580,7 +580,7 @@ InjectedScript.prototype = {
*/
evaluate: function(expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview)
{
- return this._evaluateAndWrap(InjectedScriptHost.evaluateWithExceptionDetails, InjectedScriptHost, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview);
+ return this._evaluateAndWrap(null, null, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview);
},
/**
@@ -616,7 +616,7 @@ InjectedScript.prototype = {
return "Given expression does not evaluate to a function";
return { wasThrown: false,
- result: this._wrapObject(func.apply(object, resolvedArgs), objectGroup, returnByValue),
+ result: this._wrapObject(InjectedScriptHost.callFunction(func, object, resolvedArgs), objectGroup, returnByValue),
__proto__: null };
} catch (e) {
return this._createThrownValue(e, objectGroup, false);
@@ -653,8 +653,8 @@ InjectedScript.prototype = {
},
/**
- * @param {!Function} evalFunction
- * @param {!Object} object
+ * @param {?function(string):*} evalFunction
+ * @param {?Object} object
* @param {string} expression
* @param {string} objectGroup
* @param {boolean} isEvalOnCallFrame
@@ -694,8 +694,8 @@ InjectedScript.prototype = {
},
/**
- * @param {!Function} evalFunction
- * @param {!Object} object
+ * @param {?function(string):*} evalFunction
+ * @param {?Object} object
* @param {string} objectGroup
* @param {string} expression
* @param {boolean} isEvalOnCallFrame
@@ -733,7 +733,7 @@ InjectedScript.prototype = {
if (prefix)
expression = prefix + "\n" + expression + "\n" + suffix;
- var wrappedResult = evalFunction.call(object, expression);
+ var wrappedResult = evalFunction ? InjectedScriptHost.callFunction(evalFunction, object, [expression]) : InjectedScriptHost.evaluateWithExceptionDetails(expression);
if (objectGroup === "console" && !wrappedResult.exceptionDetails)
this._lastResult = wrappedResult.result;
return wrappedResult;
@@ -783,7 +783,7 @@ InjectedScript.prototype = {
if (!callFrame)
return "Could not find call frame with given id";
if (parsedCallFrameId["asyncOrdinal"])
- return this._evaluateAndWrap(InjectedScriptHost.evaluateWithExceptionDetails, InjectedScriptHost, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview, callFrame.scopeChain);
+ return this._evaluateAndWrap(null, null, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview, callFrame.scopeChain);
return this._evaluateAndWrap(callFrame.evaluateWithExceptionDetails, callFrame, expression, objectGroup, true, injectCommandLineAPI, returnByValue, generatePreview);
},
@@ -946,7 +946,7 @@ InjectedScript.prototype = {
inspectedWindow.console.error("Web Inspector error: A function was expected for module %s evaluation", name);
return null;
}
- var module = moduleFunction.call(inspectedWindow, InjectedScriptHost, inspectedWindow, injectedScriptId, this);
+ var module = InjectedScriptHost.callFunction(moduleFunction, inspectedWindow, [InjectedScriptHost, inspectedWindow, injectedScriptId, this]);
this._modules[name] = module;
return module;
},
@@ -1041,7 +1041,7 @@ InjectedScript.prototype = {
if (isSymbol(obj)) {
try {
- return Symbol.prototype.toString.call(obj) || "Symbol";
+ return InjectedScriptHost.callFunction(Symbol.prototype.toString, obj) || "Symbol";
} catch (e) {
return "Symbol";
}
@@ -1504,7 +1504,7 @@ CommandLineAPIImpl.prototype = {
*/
dir: function(var_args)
{
- return inspectedWindow.console.dir.apply(inspectedWindow.console, arguments)
+ return InjectedScriptHost.callFunction(inspectedWindow.console.dir, inspectedWindow.console, slice(arguments));
},
/**
@@ -1512,7 +1512,7 @@ CommandLineAPIImpl.prototype = {
*/
dirxml: function(var_args)
{
- return inspectedWindow.console.dirxml.apply(inspectedWindow.console, arguments)
+ return InjectedScriptHost.callFunction(inspectedWindow.console.dirxml, inspectedWindow.console, slice(arguments));
},
/**
@@ -1539,7 +1539,7 @@ CommandLineAPIImpl.prototype = {
*/
profile: function(opt_title)
{
- return inspectedWindow.console.profile.apply(inspectedWindow.console, arguments)
+ return InjectedScriptHost.callFunction(inspectedWindow.console.profile, inspectedWindow.console, slice(arguments));
},
/**
@@ -1547,7 +1547,7 @@ CommandLineAPIImpl.prototype = {
*/
profileEnd: function(opt_title)
{
- return inspectedWindow.console.profileEnd.apply(inspectedWindow.console, arguments)
+ return InjectedScriptHost.callFunction(inspectedWindow.console.profileEnd, inspectedWindow.console, slice(arguments));
},
/**
@@ -1658,7 +1658,7 @@ CommandLineAPIImpl.prototype = {
table: function(data, opt_columns)
{
- inspectedWindow.console.table.apply(inspectedWindow.console, arguments);
+ InjectedScriptHost.callFunction(inspectedWindow.console.table, inspectedWindow.console, slice(arguments));
},
/**
« no previous file with comments | « Source/core/inspector/InjectedScriptHost.idl ('k') | Source/devtools/scripts/check_injected_script_source.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698