Reviewed by mjs.
authorkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Mar 2005 15:04:01 +0000 (15:04 +0000)
committerkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Mar 2005 15:04:01 +0000 (15:04 +0000)
        Fixed: <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()

        The problem here was that the tokenizer would continue to receive chunks of data from the loader already
        after the view and part had been destroyed.  Situations like this could arise when clicking on another link
        while still loading the current view, or during self test where we rapidly open, load, and close browser
        windows very fast.

        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::write): Simple nil check against the view.
        * khtml/html/htmltokenizer.h: Changed the view pointer from a standard pointer to a QGuardedPtr.  The tokenizer's
        handle to the view will now automatically nil-out and never dangle.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/htmltokenizer.cpp
WebCore/khtml/html/htmltokenizer.h

index 9a5de7bd1d5dc2e5b5fc9e21184777462490e7a4..320b03f85d916126d2c2ab1aa11b82fcc5d50abc 100644 (file)
@@ -1,3 +1,19 @@
+2005-03-13  Kevin Decker  <kdecker@apple.com>
+
+        Reviewed by mjs.
+        
+        Fixed: <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()
+        
+        The problem here was that the tokenizer would continue to receive chunks of data from the loader already
+        after the view and part had been destroyed.  Situations like this could arise when clicking on another link 
+        while still loading the current view, or during self test where we rapidly open, load, and close browser
+        windows very fast. 
+
+        * khtml/html/htmltokenizer.cpp: 
+        (khtml::HTMLTokenizer::write): Simple nil check against the view. 
+        * khtml/html/htmltokenizer.h: Changed the view pointer from a standard pointer to a QGuardedPtr.  The tokenizer's
+        handle to the view will now automatically nil-out and never dangle.
+
 2005-03-13  Darin Adler  <darin@apple.com>
 
         Reviewed by John and Ken.
index 27c893a788b11157a8565cda2f2431907882d4ea..81a7f922b8ae992cbc6e60707a379ba1d546fcac 100644 (file)
@@ -1533,6 +1533,9 @@ void HTMLTokenizer::write(const TokenizerString &str, bool appendData)
 
     if (!buffer)
         return;
+    
+    if (!view)
+        return;
 
     if ( ( m_executingScript && appendData ) || !cachedScript.isEmpty() ) {
         // don't parse; we will do this later
index a452920f84719ce5878049b253812f993c8b556e..f7d67ac0b32ec03ec2534aedab0391e738535041 100644 (file)
@@ -370,7 +370,7 @@ protected:
     KCharsets *charsets;
     KHTMLParser *parser;
 
-    KHTMLView *view;
+    QGuardedPtr<KHTMLView> view;
 
 #ifndef NDEBUG
     bool inWrite;