REGRESSION(r229722): WebKitLegacy clients can crash when loading alternate page
authorbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Jun 2018 21:29:50 +0000 (21:29 +0000)
committerbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Jun 2018 21:29:50 +0000 (21:29 +0000)
commitec876b511375f5a3e8b7a191e2c3b507ac147938
tree803648948c768b941e413dea341daf86c783009e
parent2a5c9de8edde96092682f9f28b3e340fa8c9de8d
REGRESSION(r229722): WebKitLegacy clients can crash when loading alternate page
https://bugs.webkit.org/show_bug.cgi?id=187008

Reviewed by Chris Dumez.

The new call to 'clearProvisionalLoadForPolicyCheck' added in r229722 broke loading
behavior in WebKitLegacy.

1. We can now enter 'cancelPolicyCheckIfNeeded' without a Frame loader, in what appears
   to be a recursive call during the load cancellation (the 'm_waitingForContentPolicy'
   and 'm_waitingForNavigationPolicy' have already been nulled). It seems like we should
   return early here, or perhaps just move the RELEASE_ASSERT inside the case where we
   have an active policy check happening.

2. We also enter FrameLoader::checkContentPolicy without an active document loader. We
   should recognize this case and handle it, rather than trying to dereference a nullptr
   document loader.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): Move the RELEASE_ASSERT inside the
conditional where the frameLoader is actually used.
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::checkContentPolicy): Recognize that the activeDocumentLoader may
be nullptr at this point, and take appropriate action (rather than crashing).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233176 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/loader/DocumentLoader.cpp
Source/WebCore/loader/FrameLoader.cpp