Reviewed by Ken.
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Sep 2004 16:52:18 +0000 (16:52 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Sep 2004 16:52:18 +0000 (16:52 +0000)
        - fixed <rdar://problem/3527840> reproducible crash at johnbrown.v32.qikker.com
        (nil-deref in NodeImpl::dispatchEvent)

        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::dispatchEvent):
        guard against document or document->document() being nil

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/xml/dom_nodeimpl.cpp

index 4bbbdd01ca1ca68c9e66d947f13b3073eef2edfc..420e5da225e2cf620911a7e50f102c6c001f08cd 100644 (file)
@@ -1,3 +1,14 @@
+2004-09-23  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Ken.
+
+        - fixed <rdar://problem/3527840> reproducible crash at johnbrown.v32.qikker.com 
+        (nil-deref in NodeImpl::dispatchEvent)
+
+        * khtml/xml/dom_nodeimpl.cpp:
+        (NodeImpl::dispatchEvent):
+        guard against document or document->document() being nil
+
 2004-09-23  Darin Adler  <darin@apple.com>
 
         Reviewed by Ken.
index 23369044de79d77f01c905a1efcf1de1a7f94184..c4df555d7882dfdb1809e682fd9d2aee654634c6 100644 (file)
@@ -556,12 +556,21 @@ bool NodeImpl::dispatchEvent(EventImpl *evt, int &exceptioncode, bool tempEvent)
 
     evt->setTarget(this);
 
-    KHTMLPart *part = document->document()->part();
-
-    // Since event handling code could cause this object to be deleted, grab a reference to the view now
-    KHTMLView *view = document->document()->view();
-    if (view)
-        view->ref();
+    // We've had at least one report of a crash on a page where document is nil here.
+    // Unfortunately that page no longer exists, but we'll make this code robust against
+    // that anyway.
+    // FIXME: Much code in this class assumes document is non-nil; it would be better to
+    // ensure that document can never be nil.
+    KHTMLPart *part = nil;
+    KHTMLView *view = nil;
+    
+    if (document && document->document()) {
+        part = document->document()->part();
+        view = document->document()->view();
+        // Since event handling code could cause this object to be deleted, grab a reference to the view now
+        if (view)
+            view->ref();
+    }    
 
     bool ret = dispatchGenericEvent( evt, exceptioncode );