[Webkit-unassigned] [Bug 55467] New: crash in QtWebKitd4.dll!WebCore::Document::~Document() Line 525 C++

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Mar 1 07:31:52 PST 2011


https://bugs.webkit.org/show_bug.cgi?id=55467

           Summary: crash in QtWebKitd4.dll!WebCore::Document::~Document()
                     Line 525 C++
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: PC
        OS/Version: Windows XP
            Status: UNCONFIRMED
          Severity: Normal
          Priority: P2
         Component: WebKit Qt
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: stawel at gmail.com


Hi,

I'm getting a crash in ~Document() destructor.
It's the Qt4.7.1 version of webkit.

I have previously reported this problem:
https://bugs.webkit.org/show_bug.cgi?id=43553

now I found the time to look at this.
the crash is deterministic.
I'm attaching a test project which reproduce the crash.


the problem seems to be that, in:

Document::Document(Frame* frame, bool isXHTML, bool isHTML) 
{
....
    m_docLoader = new DocLoader(this);
....
}

and the m_docLoader is deleted i the destructor Document (~Document).
The DocLoader destructor (~DocLoader)  runs occasionally "Loader::Host::didFail"
which looks like this:

void Loader::Host::didFail(SubresourceLoader* loader, bool cancelled) 
{
...
    DocLoader* docLoader = request->docLoader();
    // Prevent the document from being destroyed before we are done with
    // the docLoader that it will delete when the document gets deleted.
    RefPtr<Document> protector(docLoader->doc());
...
}


Best Regards
Paweł 





callstack:
     QtWebKitd4.dll!WTF::ListHashSet<WebCore::CachedResource *,256,WTF::PtrHash<WebCore::CachedResource *> >::begin()  Line 421 + 0x3 bytes    C++
     QtWebKitd4.dll!WebCore::DocLoader::clearPreloads()  Line 432 + 0x16 bytes    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 69    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x04b93ea8, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x04ba01b0, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x0314b740, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x0315e248, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x03134a20, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x0314ff08, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x04b9cd88, bool cancelled=true)  Line 459 + 0xc bytes    C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::Document::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 500 + 0x24 bytes    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::~RefPtr<WebCore::Document>()  Line 54 + 0x12 bytes    C++
>	QtWebKitd4.dll!WebCore::Loader::Host::didFail(WebCore::SubresourceLoader * loader=0x04b989b0, bool cancelled=true)  Line 459 + 0xc bytes	C++
     QtWebKitd4.dll!WebCore::Loader::Host::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 588    C++
     QtWebKitd4.dll!WebCore::Loader::cancelRequests(WebCore::DocLoader * docLoader=0x04ba1fa0)  Line 254    C++
     QtWebKitd4.dll!WebCore::DocLoader::~DocLoader()  Line 68    C++
     QtWebKitd4.dll!WebCore::DocLoader::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WTF::deleteOwnedPtr<WebCore::DocLoader>(WebCore::DocLoader * ptr=0x04ba1fa0)  Line 55 + 0x1c bytes    C++
     QtWebKitd4.dll!WTF::OwnPtr<WebCore::DocLoader>::clear()  Line 60 + 0x12 bytes    C++
     QtWebKitd4.dll!WebCore::Document::~Document()  Line 525    C++
     QtWebKitd4.dll!WebCore::HTMLDocument::~HTMLDocument()  Line 91 + 0x56 bytes    C++
     QtWebKitd4.dll!WebCore::HTMLDocument::`scalar deleting destructor'()  + 0xf bytes    C++
     QtWebKitd4.dll!WebCore::Document::selfOnlyDeref()  Line 217 + 0x21 bytes    C++
     QtWebKitd4.dll!WebCore::Document::removedLastRef()  Line 496    C++
     QtWebKitd4.dll!WebCore::TreeShared<WebCore::Node>::deref()  Line 71    C++
     QtWebKitd4.dll!WTF::derefIfNotNull<WebCore::Document>(WebCore::Document * ptr=0x04b902a8)  Line 54    C++
     QtWebKitd4.dll!WTF::RefPtr<WebCore::Document>::operator=(const WTF::PassRefPtr<WebCore::Document> & o={...})  Line 131 + 0x9 bytes    C++
     QtWebKitd4.dll!WebCore::Frame::setDocument(WTF::PassRefPtr<WebCore::Document> newDoc={...})  Line 293    C++
     QtWebKitd4.dll!WebCore::FrameLoader::clear(bool clearWindowProperties=true, bool clearScriptObjects=true, bool clearFrameView=true)  Line 735    C++
     QtWebKitd4.dll!WebCore::FrameLoader::begin(const WebCore::KURL & url={...}, bool dispatch=true, WebCore::SecurityOrigin * origin=0x00000000)  Line 821    C++
     QtWebKitd4.dll!QWebFrame::setUrl(const QUrl & url={...})  Line 803 + 0x4d bytes    C++
     QtWebKitd4.dll!QWebView::setUrl(const QUrl & url={...})  Line 546    C++
     test.exe!Widget::on_pushButton_clicked()  Line 42 + 0x23 bytes    C++
     test.exe!Widget::qt_metacall(QMetaObject::Call _c=InvokeMetaMethod, int _id=0, void * * _a=0x0012cde0)  Line 77 + 0x8 bytes    C++
     QtCored4.dll!QMetaObject::metacall(QObject * object=0x0012febc, QMetaObject::Call cl=InvokeMetaMethod, int idx=27, void * * argv=0x0012cde0)  Line 238    C++
     QtCored4.dll!QMetaObject::activate(QObject * sender=0x030d0c40, const QMetaObject * m=0x65aabad0, int local_signal_index=2, void * * argv=0x0012cde0)  Line 3272 + 0x27 bytes    C++
     QtGuid4.dll!QAbstractButton::clicked(bool _t1=false)  Line 204 + 0x15 bytes    C++
     QtGuid4.dll!QAbstractButtonPrivate::emitClicked()  Line 548    C++
     QtGuid4.dll!QAbstractButtonPrivate::click()  Line 540    C++
     QtGuid4.dll!QAbstractButton::mouseReleaseEvent(QMouseEvent * e=0x0012d6dc)  Line 1122    C++
     QtGuid4.dll!QWidget::event(QEvent * event=0x0012d6dc)  Line 8201    C++
     QtGuid4.dll!QAbstractButton::event(QEvent * e=0x0012d6dc)  Line 1081    C++
     QtGuid4.dll!QPushButton::event(QEvent * e=0x0012d6dc)  Line 684    C++
     QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x030d0c40, QEvent * e=0x0012d6dc)  Line 4445 + 0x11 bytes    C++
     QtGuid4.dll!QApplication::notify(QObject * receiver=0x030d0c40, QEvent * e=0x0012d6dc)  Line 4006 + 0x2f bytes    C++
     QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x030d0c40, QEvent * event=0x0012d6dc)  Line 732 + 0x15 bytes    C++
     QtCored4.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver=0x030d0c40, QEvent * event=0x0012d6dc)  Line 218 + 0x38 bytes    C++
     QtGuid4.dll!QApplicationPrivate::sendMouseEvent(QWidget * receiver=0x030d0c40, QMouseEvent * event=0x0012d6dc, QWidget * alienWidget=0x030d0c40, QWidget * nativeWidget=0x0012febc, QWidget * * buttonDown=0x65cd7aa4, QPointer<QWidget> & lastMouseReceiver={...}, bool spontaneous=true)  Line 3103 + 0xe bytes    C++
     QtGuid4.dll!QETWidget::translateMouseEvent(const tagMSG & msg={...})  Line 3321 + 0x2a bytes    C++
     QtGuid4.dll!QtWndProc(HWND__ * hwnd=0x001715b4, unsigned int message=514, unsigned int wParam=0, long lParam=14418057)  Line 1659 + 0xc bytes    C++
     user32.dll!_InternalCallWinProc at 20()  + 0x28 bytes    
     user32.dll!_UserCallWinProcCheckWow at 32()  + 0xc8 bytes    
     user32.dll!_DispatchMessageWorker at 8()  + 0xe9 bytes    
     user32.dll!_DispatchMessageW at 4()  + 0xf bytes    
     QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...})  Line 807    C++
     QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...})  Line 1170 + 0x15 bytes    C++
     QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...})  Line 150    C++
     QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...})  Line 201 + 0x2d bytes    C++
     QtCored4.dll!QCoreApplication::exec()  Line 1009 + 0x15 bytes    C++
     QtGuid4.dll!QApplication::exec()  Line 3720    C++
     test.exe!main(int argc=1, char * * argv=0x02f58788)  Line 10 + 0x6 bytes    C++
     test.exe!WinMain(HINSTANCE__ * instance=0x00400000, HINSTANCE__ * prevInstance=0x00000000, char * __formal=0x002220cf, int cmdShow=1)  Line 131 + 0x12 bytes    C++
     test.exe!__tmainCRTStartup()  Line 589 + 0x35 bytes    C
     test.exe!WinMainCRTStartup()  Line 414    C
     kernel32.dll!_BaseProcessStart at 4()  + 0x28 bytes    

output:
First-chance exception at 0x00a61a9a (QtWebKitd4.dll) in test.exe: 0xC0000005: Access violation reading location 0xfeeeff02.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list