Fix <rdar://problem/5652740> Crash occurs at WebCore::Widget::getView() after draggin...
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Jan 2008 20:25:45 +0000 (20:25 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Jan 2008 20:25:45 +0000 (20:25 +0000)
Reviewed by Adele and John.

We hit this crash if the page reloads between DragController::dragUpdated
and DragController::performDrag, meaning that m_document starts pointing to
a now viewless document.  This is picked up by an assertion in performDrag
which I have now replaced with an assignment given that the assertion is
invalid -- it is possible for m_document to be changed between dragUpdated
performDrag

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29313 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/page/DragController.cpp

index b301bf6..29ec7cc 100644 (file)
@@ -1,3 +1,20 @@
+2008-01-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Adele and John.
+
+        Fix <rdar://problem/5652740> Crash occurs at WebCore::Widget::getView() after
+        dragging file into window that contains web page ( http://www.econocraft.com/flood_arch.htm )
+
+        We hit this crash if the page reloads between DragController::dragUpdated
+        and DragController::performDrag, meaning that m_document starts pointing to
+        a now viewless document.  This is picked up by an assertion in performDrag
+        which I have now replaced with an assignment given that the assertion is 
+        invalid -- it is possible for m_document to be changed between dragUpdated
+        performDrag
+
+        * page/DragController.cpp:
+        (WebCore::DragController::performDrag):
+
 2008-01-08  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Darin.
index bf7a57f..ecca5e7 100644 (file)
@@ -175,7 +175,7 @@ DragOperation DragController::dragUpdated(DragData* dragData)
 bool DragController::performDrag(DragData* dragData)
 {   
     ASSERT(dragData);
-    ASSERT(m_document == m_page->mainFrame()->documentAtPoint(dragData->clientPosition()));
+    m_document = m_page->mainFrame()->documentAtPoint(dragData->clientPosition());
     if (m_isHandlingDrag) {
         ASSERT(m_dragDestinationAction & DragDestinationActionDHTML);
         m_client->willPerformDragDestinationAction(DragDestinationActionDHTML, dragData);