diff --git a/js/src/xpconnect/src/xpcstack.cpp b/js/src/xpconnect/src/xpcstack.cpp index 244828adba7..bd098ada1c2 100644 --- a/js/src/xpconnect/src/xpcstack.cpp +++ b/js/src/xpconnect/src/xpcstack.cpp @@ -133,6 +133,9 @@ nsresult XPCJSStackFrame::CreateStack(JSContext* cx, JSStackFrame* fp, XPCJSStackFrame** stack) { + static const unsigned MAX_FRAMES = 3000; + unsigned numFrames = 0; + nsRefPtr first = new XPCJSStackFrame(); nsRefPtr self = first; while(fp && self) @@ -187,7 +190,11 @@ XPCJSStackFrame::CreateStack(JSContext* cx, JSStackFrame* fp, } } - if(JS_FrameIterator(cx, &fp)) + if (++numFrames > MAX_FRAMES) + { + fp = NULL; + } + else if(JS_FrameIterator(cx, &fp)) { XPCJSStackFrame* frame = new XPCJSStackFrame(); self->mCaller = frame;