Title: [248253] releases/WebKitGTK/webkit-2.24/Source/WebKit
Revision
248253
Author
[email protected]
Date
2019-08-03 20:24:05 -0700 (Sat, 03 Aug 2019)

Log Message

Merge r247508 - [WPE][GTK] UI process crash due to NULL dereference in webkitWebViewResourceLoadStarted()
https://bugs.webkit.org/show_bug.cgi?id=199621

Reviewed by Michael Catanzaro.

Null-check frame received in injected bundle message to ensure the frame hasn't been destroyed.

* UIProcess/API/glib/WebKitInjectedBundleClient.cpp:
* UIProcess/API/glib/WebKitWebResource.cpp:
(webkitWebResourceCreate): Receive a reference to the frame instead of a pointer.
* UIProcess/API/glib/WebKitWebResourcePrivate.h:
* UIProcess/API/glib/WebKitWebView.cpp:
(webkitWebViewResourceLoadStarted): Ditto.
* UIProcess/API/glib/WebKitWebViewPrivate.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/ChangeLog (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/ChangeLog	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/ChangeLog	2019-08-04 03:24:05 UTC (rev 248253)
@@ -1,5 +1,22 @@
 2019-07-17  Carlos Garcia Campos  <[email protected]>
 
+        [WPE][GTK] UI process crash due to NULL dereference in webkitWebViewResourceLoadStarted()
+        https://bugs.webkit.org/show_bug.cgi?id=199621
+
+        Reviewed by Michael Catanzaro.
+
+        Null-check frame received in injected bundle message to ensure the frame hasn't been destroyed.
+
+        * UIProcess/API/glib/WebKitInjectedBundleClient.cpp:
+        * UIProcess/API/glib/WebKitWebResource.cpp:
+        (webkitWebResourceCreate): Receive a reference to the frame instead of a pointer.
+        * UIProcess/API/glib/WebKitWebResourcePrivate.h:
+        * UIProcess/API/glib/WebKitWebView.cpp:
+        (webkitWebViewResourceLoadStarted): Ditto.
+        * UIProcess/API/glib/WebKitWebViewPrivate.h:
+
+2019-07-17  Carlos Garcia Campos  <[email protected]>
+
         [GTK][WPE] Do not assert when receiving invalid data in injected bundle messages
         https://bugs.webkit.org/show_bug.cgi?id=199830
 

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp	2019-08-04 03:24:05 UTC (rev 248253)
@@ -45,43 +45,70 @@
     {
         if (g_str_equal(messageName, "DidInitiateLoadForResource")) {
             WebFrameProxy* frame = static_cast<WebFrameProxy*>(message.get(String::fromUTF8("Frame")));
+            if (!frame)
+                return;
+
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             API::URLRequest* webRequest = static_cast<API::URLRequest*>(message.get(String::fromUTF8("Request")));
+            if (!webRequest)
+                return;
+
             GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(webRequest->resourceRequest()));
-
-            webkitWebViewResourceLoadStarted(webView, frame, resourceIdentifier->value(), request.get());
+            webkitWebViewResourceLoadStarted(webView, *frame, resourceIdentifier->value(), request.get());
         } else if (g_str_equal(messageName, "DidSendRequestForResource")) {
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
             if (!resource)
                 return;
 
             API::URLRequest* webRequest = static_cast<API::URLRequest*>(message.get(String::fromUTF8("Request")));
+            if (!webRequest)
+                return;
+
             GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(webRequest->resourceRequest()));
             API::URLResponse* webRedirectResponse = static_cast<API::URLResponse*>(message.get(String::fromUTF8("RedirectResponse")));
-            GRefPtr<WebKitURIResponse> redirectResponse = webRedirectResponse ? adoptGRef(webkitURIResponseCreateForResourceResponse(webRedirectResponse->resourceResponse())) : 0;
-
+            GRefPtr<WebKitURIResponse> redirectResponse = webRedirectResponse ? adoptGRef(webkitURIResponseCreateForResourceResponse(webRedirectResponse->resourceResponse())) : nullptr;
             webkitWebResourceSentRequest(resource.get(), request.get(), redirectResponse.get());
         } else if (g_str_equal(messageName, "DidReceiveResponseForResource")) {
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
             if (!resource)
                 return;
 
             API::URLResponse* webResponse = static_cast<API::URLResponse*>(message.get(String::fromUTF8("Response")));
+            if (!webResponse)
+                return;
+
             GRefPtr<WebKitURIResponse> response = adoptGRef(webkitURIResponseCreateForResourceResponse(webResponse->resourceResponse()));
-
             webkitWebResourceSetResponse(resource.get(), response.get());
         } else if (g_str_equal(messageName, "DidReceiveContentLengthForResource")) {
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
             if (!resource)
                 return;
 
             API::UInt64* contentLength = static_cast<API::UInt64*>(message.get(String::fromUTF8("ContentLength")));
+            if (!contentLength)
+                return;
+
             webkitWebResourceNotifyProgress(resource.get(), contentLength->value());
         } else if (g_str_equal(messageName, "DidFinishLoadForResource")) {
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
             if (!resource)
                 return;
@@ -90,11 +117,17 @@
             webkitWebViewRemoveLoadingWebResource(webView, resourceIdentifier->value());
         } else if (g_str_equal(messageName, "DidFailLoadForResource")) {
             API::UInt64* resourceIdentifier = static_cast<API::UInt64*>(message.get(String::fromUTF8("Identifier")));
+            if (!resourceIdentifier)
+                return;
+
             GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
             if (!resource)
                 return;
 
             API::Error* webError = static_cast<API::Error*>(message.get(String::fromUTF8("Error")));
+            if (!webError)
+                return;
+
             const ResourceError& platformError = webError->platformError();
             GUniquePtr<GError> resourceError(g_error_new_literal(g_quark_from_string(platformError.domain().utf8().data()),
                 toWebKitError(platformError.errorCode()), platformError.localizedDescription().utf8().data()));
@@ -107,6 +140,9 @@
 #if PLATFORM(GTK)
         } else if (g_str_equal(messageName, "DidGetSnapshot")) {
             API::UInt64* callbackID = static_cast<API::UInt64*>(message.get("CallbackID"));
+            if (!callbackID)
+                return;
+
             WebImage* image = static_cast<WebImage*>(message.get("Snapshot"));
             webKitWebViewDidReceiveSnapshot(webView, callbackID->value(), image);
 #endif

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp	2019-08-04 03:24:05 UTC (rev 248253)
@@ -230,11 +230,11 @@
     g_object_notify(G_OBJECT(resource), "uri");
 }
 
-WebKitWebResource* webkitWebResourceCreate(WebFrameProxy* frame, WebKitURIRequest* request, bool isMainResource)
+WebKitWebResource* webkitWebResourceCreate(WebFrameProxy& frame, WebKitURIRequest* request, bool isMainResource)
 {
     ASSERT(frame);
     WebKitWebResource* resource = WEBKIT_WEB_RESOURCE(g_object_new(WEBKIT_TYPE_WEB_RESOURCE, NULL));
-    resource->priv->frame = frame;
+    resource->priv->frame = &frame;
     resource->priv->uri = webkit_uri_request_get_uri(request);
     resource->priv->isMainResource = isMainResource;
     return resource;

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResourcePrivate.h (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResourcePrivate.h	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebResourcePrivate.h	2019-08-04 03:24:05 UTC (rev 248253)
@@ -21,7 +21,7 @@
 
 #include "WebKitWebResource.h"
 
-WebKitWebResource* webkitWebResourceCreate(WebKit::WebFrameProxy*, WebKitURIRequest*, bool isMainResource);
+WebKitWebResource* webkitWebResourceCreate(WebKit::WebFrameProxy&, WebKitURIRequest*, bool isMainResource);
 void webkitWebResourceSentRequest(WebKitWebResource*, WebKitURIRequest*, WebKitURIResponse*);
 void webkitWebResourceSetResponse(WebKitWebResource*, WebKitURIResponse*);
 void webkitWebResourceNotifyProgress(WebKitWebResource*, guint64 bytesReceived);

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2019-08-04 03:24:05 UTC (rev 248253)
@@ -2378,10 +2378,10 @@
 }
 #endif
 
-void webkitWebViewResourceLoadStarted(WebKitWebView* webView, WebFrameProxy* frame, uint64_t resourceIdentifier, WebKitURIRequest* request)
+void webkitWebViewResourceLoadStarted(WebKitWebView* webView, WebFrameProxy& frame, uint64_t resourceIdentifier, WebKitURIRequest* request)
 {
     WebKitWebViewPrivate* priv = webView->priv;
-    bool isMainResource = frame->isMainFrame() && !priv->mainResource;
+    bool isMainResource = frame.isMainFrame() && !priv->mainResource;
     WebKitWebResource* resource = webkitWebResourceCreate(frame, request, isMainResource);
     if (isMainResource)
         priv->mainResource = resource;

Modified: releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h (248252 => 248253)


--- releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h	2019-08-04 03:24:02 UTC (rev 248252)
+++ releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h	2019-08-04 03:24:05 UTC (rev 248253)
@@ -69,7 +69,7 @@
 void webkitWebViewMouseTargetChanged(WebKitWebView*, const WebKit::WebHitTestResultData&, OptionSet<WebKit::WebEvent::Modifier>);
 void webkitWebViewHandleDownloadRequest(WebKitWebView*, WebKit::DownloadProxy*);
 void webkitWebViewPrintFrame(WebKitWebView*, WebKit::WebFrameProxy*);
-void webkitWebViewResourceLoadStarted(WebKitWebView*, WebKit::WebFrameProxy*, uint64_t resourceIdentifier, WebKitURIRequest*);
+void webkitWebViewResourceLoadStarted(WebKitWebView*, WebKit::WebFrameProxy&, uint64_t resourceIdentifier, WebKitURIRequest*);
 void webkitWebViewRunFileChooserRequest(WebKitWebView*, WebKitFileChooserRequest*);
 WebKitWebResource* webkitWebViewGetLoadingWebResource(WebKitWebView*, uint64_t resourceIdentifier);
 #if PLATFORM(GTK)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to