Bug 9477 - REGRESSION: fast/dom/replaceChild.html crashes on WebKit ToT in debug build
Summary: REGRESSION: fast/dom/replaceChild.html crashes on WebKit ToT in debug build
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 420+
Hardware: Mac OS X 10.4
: P1 Normal
Assignee: Nobody
URL:
Keywords: Regression
Depends on:
Blocks:
 
Reported: 2006-06-16 22:39 PDT by David Kilzer (:ddkilzer)
Modified: 2006-06-17 18:26 PDT (History)
5 users (show)

See Also:


Attachments
Patch v1 (1.40 KB, patch)
2006-06-17 12:27 PDT, David Kilzer (:ddkilzer)
darin: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description David Kilzer (:ddkilzer) 2006-06-16 22:39:12 PDT
Running fast/dom/replaceChild.html on WebKit ToT (r14895) causes a reproducible crash on my Mac OS X 10.4.6 (8I127/PowerPC) PB G4.

I'm not sure when this bug was introduced.  This doesn't seem to happen when this test is loaded in the browser, although one of two resources is NOT loaded per the Activity Window when the test is opened in the browser.

Relevant stack trace bits:

Command: DumpRenderTree
Path:    /Users/ddkilzer/Projects/Cocoa/WebKit/WebKitBuild/Debug/DumpRenderTree
Parent:  perl [10628]

Version: ??? (???)

PID:    10671
Thread: 0

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0x2c323130

Thread 0 Crashed:
0   <<00000000>>        0x2c323130 0 + 741486896
1   com.apple.JavaScriptCore    0x12d1bc98 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 288 (object.cpp:96)
2   com.apple.JavaScriptCore    0x12d11110 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 908 (nodes.cpp:758)
3   com.apple.JavaScriptCore    0x12d0db0c KJS::ExprStatementNode::execute(KJS::ExecState*) + 220 (nodes.cpp:1661)
4   com.apple.JavaScriptCore    0x12d0a2e4 KJS::SourceElementsNode::execute(KJS::ExecState*) + 616 (nodes.cpp:2448)
5   com.apple.JavaScriptCore    0x12d07ca0 KJS::BlockNode::execute(KJS::ExecState*) + 216 (nodes.cpp:1638)
6   com.apple.JavaScriptCore    0x12d0d994 KJS::IfNode::execute(KJS::ExecState*) + 500 (nodes.cpp:1680)
7   com.apple.JavaScriptCore    0x12d0a194 KJS::SourceElementsNode::execute(KJS::ExecState*) + 280 (nodes.cpp:2442)
8   com.apple.JavaScriptCore    0x12d07ca0 KJS::BlockNode::execute(KJS::ExecState*) + 216 (nodes.cpp:1638)
9   com.apple.JavaScriptCore    0x12cf633c KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 92 (function.cpp:333)
10  com.apple.JavaScriptCore    0x12cf5964 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 668 (function.cpp:104)
11  com.apple.JavaScriptCore    0x12d1bc98 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 288 (object.cpp:96)
12  com.apple.WebCore           0x01338aa8 KJS::JSAbstractEventListener::handleEvent(WebCore::Event*, bool) + 748 (kjs_events.cpp:105)
13  com.apple.WebCore           0x0114cb34 WebCore::Document::handleWindowEvent(WebCore::Event*, bool) + 308 (Document.cpp:2208)
14  com.apple.WebCore           0x012fa1ac WebCore::EventTargetNode::dispatchWindowEvent(WebCore::AtomicString const&, bool, bool) + 324 (EventTargetNode.cpp:315)
15  com.apple.WebCore           0x0114fb68 WebCore::Document::implicitClose() + 700 (Document.cpp:1179)
16  com.apple.WebCore           0x0111ceb4 WebCore::Frame::checkEmitLoadEvent() + 724 (Frame.cpp:858)
17  com.apple.WebCore           0x011224ac WebCore::Frame::checkCompleted() + 528 (Frame.cpp:823)
18  com.apple.WebCore           0x011228d4 WebCore::Frame::finishedParsing() + 44 (Frame.cpp:778)
19  com.apple.WebCore           0x01149c88 WebCore::Document::finishedParsing() + 72 (Document.cpp:3223)
20  com.apple.WebCore           0x01040e0c WebCore::HTMLParser::finished() + 300 (HTMLParser.cpp:1345)
21  com.apple.WebCore           0x01046228 WebCore::HTMLTokenizer::end() + 308 (HTMLTokenizer.cpp:1489)
22  com.apple.WebCore           0x010466a4 WebCore::HTMLTokenizer::finish() + 1128 (HTMLTokenizer.cpp:1527)
23  com.apple.WebCore           0x01147abc WebCore::Document::finishParsing() + 84 (Document.cpp:1313)
24  com.apple.WebCore           0x011231d0 WebCore::Frame::endIfNotLoading() + 432 (Frame.cpp:734)
25  com.apple.WebCore           0x01123224 WebCore::Frame::end() + 52 (Frame.cpp:717)
26  com.apple.WebCore           0x01160b64 -[WebCoreFrameBridge end] + 72 (WebCoreFrameBridge.mm:703)
27  com.apple.WebKit            0x00246688 -[WebDataSource(WebPrivate) _finishedLoading] + 220 (WebDataSource.m:792)
28  com.apple.WebKit            0x002833c0 -[WebMainResourceLoader didFinishLoading] + 560 (WebMainResourceLoader.m:379)
29  com.apple.WebKit            0x00241788 -[WebLoader connectionDidFinishLoading:] + 184 (WebLoader.m:575)
30  com.apple.Foundation        0x929a884c -[NSURLConnection(NSURLConnectionInternal) _sendDidFinishLoadingCallback] + 188
31  com.apple.Foundation        0x929a6ab8 -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] + 556
32  com.apple.Foundation        0x929a6810 _sendCallbacks + 156
33  com.apple.CoreFoundation    0x907e44cc __CFRunLoopDoSources0 + 384
34  com.apple.CoreFoundation    0x907e39fc __CFRunLoopRun + 452
35  com.apple.CoreFoundation    0x907e347c CFRunLoopRunSpecific + 268
36  com.apple.Foundation        0x92985164 -[NSRunLoop runMode:beforeDate:] + 172
37  DumpRenderTree              0x00008ac4 dumpRenderTree + 904 (DumpRenderTree.m:744)
38  DumpRenderTree              0x00005d48 main + 3672 (DumpRenderTree.m:321)
39  DumpRenderTree              0x000024f0 _start + 340 (crt.c:272)
40  DumpRenderTree              0x00002398 start + 60
Comment 1 David Kilzer (:ddkilzer) 2006-06-16 22:48:48 PDT
And fast/events/mouseover-mouseout2.html fails similarly.
Comment 2 mitz 2006-06-17 04:25:22 PDT
The immediate cause for the bug is that when a frame is deallocated along with its WebCoreScriptDebugger, the corresponding WebCoreScriptDebuggerImp is deleted but not detached. I'm surprised that it's otherwise okay to execute a script in a frame whose WebFrame has been deallocated.
Comment 3 David Kilzer (:ddkilzer) 2006-06-17 08:27:16 PDT
CC the usual suspects from Bug 9476.
Comment 4 David Kilzer (:ddkilzer) 2006-06-17 12:27:12 PDT
Created attachment 8889 [details]
Patch v1

Patch v1 assumes that the WebFrame may get deallocated when the function is called, so it refetches the debugger before using it again in FunctionImp::callAsFunction().

I am running run-webkit-tests now.  Will report results when completed.
Comment 5 David Kilzer (:ddkilzer) 2006-06-17 12:45:01 PDT
(In reply to comment #4)
> I am running run-webkit-tests now.  Will report results when completed.

All of the tests passed (including http tests; Bug 9478).
Comment 6 Darin Adler 2006-06-17 17:12:34 PDT
Comment on attachment 8889 [details]
Patch v1

r=me -- Did Tim check the performance impact of adding the debugging hooks?
Comment 7 David Kilzer (:ddkilzer) 2006-06-17 17:25:54 PDT
Committed revision 14900.
Comment 8 Timothy Hatcher 2006-06-17 18:26:07 PDT
I did check performance, that is why the debugger is enabled only for debug builds or when a default is set.