Closed
Bug 304514
Opened 19 years ago
Closed 3 years ago
nsContentIterator::Init(range) doesn't consider Document nodes
Categories
(Core :: DOM: Core & HTML, defect, P5)
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: WeirdAl, Unassigned)
References
()
Details
(Keywords: assertion, hang, testcase)
Attachments
(1 file)
4.54 KB,
patch
|
Details | Diff | Splinter Review |
Derived from bug 157373. A patch there fixes nsRange::ToString() for document
nodes, but in the process a similar bug in nsContentIterator causes an endless
loop with assertions.
###!!! ASSERTION: Null current node in an iterator that's not done!: 'mCurNode',
file c:/mozsource/mozilla/content/base/src/nsContentIterator.cpp, line 1191
nsContentIterator::Init() sets mCommonParent = do_QueryInterface(dN), where
mCommonParent is of type nsIContent and dN is a nsIDOMNode. However, dN can be
a Document node, in which case the QI will return null.
Similar problems occur with StartCon a few lines later, resulting in the Init
function bailing out and returning NS_ERROR_FAILURE. Naturally, the next frame
in the stack, nsRange::ToString(), didn't bother checking a return value:
iter->Init(this);
http://lxr.mozilla.org/seamonkey/source/content/base/src/nsRange.cpp#2094
A similar bug exists for EndCon, a few lines later. I don't know whether or not
other failures exist here.
Steps to reproduce:
(1) Apply attachment 192565 [details] [diff] [review] to your tree.
(2) make tier_9
(3) Start your browser and point it to bug 157373.
(4) Click on the URL link in the bug.
Expected results:
Two alerts.
Actual results:
One alert, followed by the above assertion in an endless loop, and hang.
Reporter | ||
Comment 1•19 years ago
|
||
Here's what I have after a little thinking:
// nsContentIterator::Init(nsIDOMRange* aRange) has to set these.
nsCOMPtr<nsIContent> mCurNode;
nsCOMPtr<nsIContent> mFirst;
nsCOMPtr<nsIContent> mLast;
nsCOMPtr<nsIContent> mCommonParent;
/**
* Flag for nsPreContentIterator.
*/
PRBool mPre;
/**
* This array is cleared in Init(), and then populated in RebuildIndexStack.
*/
nsAutoVoidArray mIndexes;
// Not changed in Init.
PRInt32 mCachedIndex;
// False, except at end on Init, where it becomes !mCurNode.
This patch attempts to set mCurNode, mFirst and mLast accordingly when we have
a boundary point in the range as a document.
Unfortunately, mCurrentParent is still used quite heavily throughout the rest
of the iterator, and it will be null under these circumstances. I don't have
any way of knowing how to fix the code for this. RebuildIndexStack, for
instance, will eventually return NS_ERROR_FAILURE. I shudder at the thought of
GetNextSibling, NextNode and friends.
Reporter | ||
Comment 2•19 years ago
|
||
> // False, except at end on Init, where it becomes !mCurNode.
mIsDone
Updated•15 years ago
|
Assignee: general → nobody
QA Contact: ian → general
Comment 3•6 years ago
|
||
https://bugzilla.mozilla.org/show_bug.cgi?id=1472046
Move all DOM bugs that haven’t been updated in more than 3 years and has no one currently assigned to P5.
If you have questions, please contact :mdaly.
Priority: -- → P5
Assignee | ||
Updated•6 years ago
|
Component: DOM → DOM: Core & HTML
Comment 4•3 years ago
|
||
Hey Alex,
Is this issue still occurring for you or can we close it?
Flags: needinfo?(ajvincent)
Reporter | ||
Comment 5•3 years ago
|
||
I'd say close it. I have no idea what the state of the code is, but I haven't touched this in over a decade.
Flags: needinfo?(ajvincent)
Comment 6•3 years ago
|
||
Marking this as Resolved > Worksforme based on the last comment.
Status: NEW → RESOLVED
Closed: 3 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•