Bug 197052, crash/hang when using innerHTML recursively, r+sr=jst

This commit is contained in:
Olli.Pettay%helsinki.fi 2007-02-11 00:30:20 +00:00
Родитель 27038f0d93
Коммит b117c7ed80
2 изменённых файлов: 10 добавлений и 0 удалений

Просмотреть файл

@ -134,6 +134,8 @@
#include "nsIEditor.h"
#include "nsNodeInfoManager.h"
#define NS_MAX_DOCUMENT_WRITE_DEPTH 20
#define DETECTOR_CONTRACTID_MAX 127
static char g_detector_contractid[DETECTOR_CONTRACTID_MAX + 1];
static PRBool gInitDetector = PR_FALSE;
@ -2275,6 +2277,10 @@ nsresult
nsHTMLDocument::WriteCommon(const nsAString& aText,
PRBool aNewlineTerminate)
{
mTooDeepWriteRecursion =
(mWriteLevel > NS_MAX_DOCUMENT_WRITE_DEPTH || mTooDeepWriteRecursion);
NS_ENSURE_STATE(!mTooDeepWriteRecursion);
if (IsXHTML()) {
// No calling document.write*() on XHTML!
@ -2334,6 +2340,8 @@ nsHTMLDocument::WriteCommon(const nsAString& aText,
--mWriteLevel;
mTooDeepWriteRecursion = (mWriteLevel != 0 && mTooDeepWriteRecursion);
return rv;
}

Просмотреть файл

@ -325,6 +325,8 @@ protected:
PRPackedBool mIsFrameset;
PRPackedBool mTooDeepWriteRecursion;
PRBool IdTableIsLive() const {
// live if we've had over 63 misses
return (mIdMissCount & 0x40) != 0;