Nullptr crash in Document::open after calling policyChecker().stopCheck()
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Apr 2019 06:44:45 +0000 (06:44 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Apr 2019 06:44:45 +0000 (06:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=196479

Reviewed by Antti Koivisto.

Added a missing nullptr check in Document::open after calling m_frame->loader().policyChecker().stopCheck()
since it invokes m_willSubmitFormCompletionHandlers in WebKit2, and that could clear m_frame.

Unfortunately, we don't have any reproducible test case.

* dom/Document.cpp:
(WebCore::Document::open):

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

Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp

index c25de08..caaa561 100644 (file)
@@ -1,3 +1,18 @@
+2019-04-01  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Nullptr crash in Document::open after calling policyChecker().stopCheck()
+        https://bugs.webkit.org/show_bug.cgi?id=196479
+
+        Reviewed by Antti Koivisto.
+
+        Added a missing nullptr check in Document::open after calling m_frame->loader().policyChecker().stopCheck()
+        since it invokes m_willSubmitFormCompletionHandlers in WebKit2, and that could clear m_frame.
+
+        Unfortunately, we don't have any reproducible test case.
+
+        * dom/Document.cpp:
+        (WebCore::Document::open):
+
 2019-04-01  Timothy Hatcher  <timothy@apple.com>
 
         Unreviewed build fix.
 2019-04-01  Timothy Hatcher  <timothy@apple.com>
 
         Unreviewed build fix.
index 4c40929..ef964fb 100644 (file)
@@ -2738,7 +2738,7 @@ ExceptionOr<void> Document::open(Document* responsibleDocument)
 
         if (m_frame->loader().policyChecker().delegateIsDecidingNavigationPolicy())
             m_frame->loader().policyChecker().stopCheck();
 
         if (m_frame->loader().policyChecker().delegateIsDecidingNavigationPolicy())
             m_frame->loader().policyChecker().stopCheck();
-        if (m_frame->loader().state() == FrameStateProvisional)
+        if (m_frame && m_frame->loader().state() == FrameStateProvisional)
             m_frame->loader().stopAllLoaders();
     }
 
             m_frame->loader().stopAllLoaders();
     }