[Webkit-unassigned] [Bug 10339] New: compareBoundaryPoints crash
bugzilla-daemon at opendarwin.org
bugzilla-daemon at opendarwin.org
Thu Aug 10 16:40:17 PDT 2006
http://bugzilla.opendarwin.org/show_bug.cgi?id=10339
Summary: compareBoundaryPoints crash
Product: WebKit
Version: 420+ (nightly)
Platform: Macintosh
OS/Version: Mac OS X 10.4
Status: NEW
Severity: normal
Priority: P3
Component: New Bugs
AssignedTo: webkit-unassigned at opendarwin.org
ReportedBy: Graham.Dennis at gmail.com
A large number of users of Sandvox have reported a crash in
Range::compareBoundaryPoints(Node *, int, Node *, int) that is caused by
commonAncestorContainer returning NULL. These crashes all seem to be related to
removing a node from the DOM tree, but the causes of this DOM node removal are
various. I have not been able to reproduce this bug myself. The following
addresses are from the PPC version of the WebKit build in Sandvox 1.0.4
The common part of the crash is:
0 com.apple.WebCore 0x0102ea2c
WebCore::Range::compareBoundaryPoints(WebCore::Node*, int, WebCore::Node*, int)
+ 452
1 com.apple.WebCore 0x0102eaa4
WebCore::Range::compareBoundaryPoints(WebCore::Position const&,
WebCore::Position const&) + 44
2 com.apple.WebCore 0x01195ce4
WebCore::SelectionController::nodeWillBeRemoved(WebCore::Node*) + 1024
3 com.apple.WebCore 0x010be32c
WebCore::Document::notifyBeforeNodeRemoval(WebCore::Node*) + 84
4 com.apple.WebCore 0x010c9d04
WebCore::willRemoveChild(WebCore::Node*) + 104
5 com.apple.WebCore 0x010ca34c
WebCore::ContainerNode::removeChild(WebCore::Node*, int&) + 384
Some of the various traces before this stack trace include:
6 com.apple.WebCore 0x0118cf88
WebCore::RemoveNodeCommand::doApply() + 52
7 com.apple.WebCore 0x0117fd78 WebCore::EditCommand::apply()
+ 188
8 com.apple.WebCore 0x01178034
WebCore::CompositeEditCommand::applyCommandToComposite(WebCore::EditCommandPtr&)
+ 196
9 com.apple.WebCore 0x011791ac
WebCore::CompositeEditCommand::removeNode(WebCore::Node*) + 100
10 com.apple.WebCore 0x011717f0
WebCore::ApplyStyleCommand::surroundNodeRangeWithElement(WebCore::Node*,
WebCore::Node*, WebCore::Element*) + 132
11 com.apple.WebCore 0x011744dc
WebCore::ApplyStyleCommand::addInlineStyleIfNeeded(WebCore::CSSMutableStyleDeclaration*,
WebCore::Node*, WebCore::Node*) + 1020
12 com.apple.WebCore 0x0117623c
WebCore::ApplyStyleCommand::applyInlineStyle(WebCore::CSSMutableStyleDeclaration*)
+ 1780
13 com.apple.WebCore 0x011772fc
WebCore::ApplyStyleCommand::doApply() + 244
14 com.apple.WebCore 0x0117fd78 WebCore::EditCommand::apply()
+ 188
15 com.apple.WebCore 0x01178034
WebCore::CompositeEditCommand::applyCommandToComposite(WebCore::EditCommandPtr&)
+ 196
16 com.apple.WebCore 0x01179a9c
WebCore::CompositeEditCommand::applyStyle(WebCore::CSSStyleDeclaration*,
WebCore::EditAction) + 108
17 com.apple.WebCore 0x01184fd8
WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion() + 308
18 com.apple.WebCore 0x01185804
WebCore::InsertParagraphSeparatorCommand::doApply() + 2064
19 com.apple.WebCore 0x0117fd78 WebCore::EditCommand::apply()
+ 188
20 com.apple.WebCore 0x01178034
WebCore::CompositeEditCommand::applyCommandToComposite(WebCore::EditCommandPtr&)
+ 196
21 com.apple.WebCore 0x0119b78c
WebCore::TypingCommand::insertParagraphSeparator() + 96
22 com.apple.WebCore 0x0119d0d8
WebCore::TypingCommand::doApply() + 176
23 com.apple.WebCore 0x0117fd78 WebCore::EditCommand::apply()
+ 188
24 com.apple.WebCore 0x0119b890
WebCore::TypingCommand::insertParagraphSeparator(WebCore::Document*) + 168
25 com.apple.WebCore 0x010cd0cc -[WebCoreFrameBridge
insertParagraphSeparator] + 56
and:
WebCore::ContainerNode::removeChild(WebCore::Node*, int&) + 384
WebCore::ContainerNode::replaceChild(WTF::PassRefPtr<WebCore::Node>,
WebCore::Node*, int&) + 192
-[DOMNode replaceChild::] + 132
-[KTDocWindowController(WebEditing) processEditableElementsFromDoc:] (in
Sandvox)
-[KTDocWindowController(WebView) webView:didFinishLoadForFrame:] (in Sandvox)
The actual crash is on line 461 of Range.cpp (of about a week's old ToT):
Node *n = cmnRoot->firstChild();
All that follows is pure speculation as I have not been able to reproduce the
bug myself.
In the assembly, it is the first Range::compareBoundaryPoints call that
crashes, and from the C code, this call is:
Range::compareBoundaryPoints(m_sel.start(), Position(node, 0))
It seems to me that the only way that commonAncestorNode could return NULL
(without crashing) is if the start node still exists, however its
documentElement has been deleted, but the document hasn't. This can happen if
the last external reference to the document is destroyed, as at that point, the
document deletes all nodes that aren't otherwise retained, clears its
documentElement, but keeps itself around while it still has nodes that are
referenced.
So it would appear that the selection points to nodes in an old document, but
the selection is cleared when the frame is cleared by the frame view.
I'm marking this P3 as I cannot reproduce it.
--
Configure bugmail: http://bugzilla.opendarwin.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the webkit-unassigned
mailing list