Chromium Code Reviews| Index: Source/core/dom/Document.cpp |
| diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
| index 207441719a27dff9c87b7879f8ad05b9afdfaaf7..fc714adf590622b0f9b84d171a0bd25c9f0580d3 100644 |
| --- a/Source/core/dom/Document.cpp |
| +++ b/Source/core/dom/Document.cpp |
| @@ -4155,6 +4155,19 @@ static Editor::Command command(Document* document, const String& commandName, bo |
| bool Document::execCommand(const String& commandName, bool userInterface, const String& value) |
| { |
| + // We don't allow recusrive |execComand()| to protect against attack code. |
| + // Recursive call of |execCommand()| could be happened by moving iframe |
| + // with script triggered by insertion, e.g. <iframe src="javascript:..."> |
| + // <iframe onload="...">. This usage is valid as of the specification |
| + // although, it isn't common use case, rather it is used as attack code. |
| + static bool inExecCommand = false; |
| + if (inExecCommand) |
| + return false; |
|
tkent
2014/01/29 05:06:00
Can we show a console message to tell this restric
yosin_UTC9
2014/01/29 07:50:41
Done.
|
| + TemporaryChange<bool> executeScope(inExecCommand, true); |
| + |
| + // Postpone DOM mutation events, which can execute scripts and change |
| + // DOM tree against implementation assumption. |
| + EventQueueScope eventQueueScope; |
| return command(this, commandName, userInterface).execute(value); |
| } |