Title: [248987] branches/safari-608-branch/Source/WebKit
Revision
248987
Author
kocsen_ch...@apple.com
Date
2019-08-21 18:25:43 -0700 (Wed, 21 Aug 2019)

Log Message

Cherry-pick r248959. rdar://problem/54579630

    Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
    https://bugs.webkit.org/show_bug.cgi?id=200986
    <rdar://problem/32850192>

    Reviewed by Brent Fulgham.

    Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
    The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
    does not take care of this for you, despite its name (the createCrossThreadTask() function does though).

    * NetworkProcess/NetworkProcess.cpp:
    (WebKit::NetworkProcess::fetchWebsiteData):
    (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
    (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):

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

Modified Paths

Diff

Modified: branches/safari-608-branch/Source/WebKit/ChangeLog (248986 => 248987)


--- branches/safari-608-branch/Source/WebKit/ChangeLog	2019-08-22 01:25:41 UTC (rev 248986)
+++ branches/safari-608-branch/Source/WebKit/ChangeLog	2019-08-22 01:25:43 UTC (rev 248987)
@@ -1,3 +1,42 @@
+2019-08-21  Kocsen Chung  <kocsen_ch...@apple.com>
+
+        Cherry-pick r248959. rdar://problem/54579630
+
+    Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
+    https://bugs.webkit.org/show_bug.cgi?id=200986
+    <rdar://problem/32850192>
+    
+    Reviewed by Brent Fulgham.
+    
+    Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
+    The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
+    does not take care of this for you, despite its name (the createCrossThreadTask() function does though).
+    
+    * NetworkProcess/NetworkProcess.cpp:
+    (WebKit::NetworkProcess::fetchWebsiteData):
+    (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
+    (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248959 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-21  Chris Dumez  <cdu...@apple.com>
+
+            Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
+            https://bugs.webkit.org/show_bug.cgi?id=200986
+            <rdar://problem/32850192>
+
+            Reviewed by Brent Fulgham.
+
+            Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
+            The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
+            does not take care of this for you, despite its name (the createCrossThreadTask() function does though).
+
+            * NetworkProcess/NetworkProcess.cpp:
+            (WebKit::NetworkProcess::fetchWebsiteData):
+            (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
+            (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
+
 2019-08-20  Babak Shafiei  <bshaf...@apple.com>
 
         Cherry-pick r248928. rdar://problem/54543351

Modified: branches/safari-608-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp (248986 => 248987)


--- branches/safari-608-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-08-22 01:25:41 UTC (rev 248986)
+++ branches/safari-608-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-08-22 01:25:43 UTC (rev 248987)
@@ -1339,7 +1339,7 @@
     auto path = m_idbDatabasePaths.get(sessionID);
     if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
         // FIXME: Pick the right database store based on the session ID.
-        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {
+        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable {
             RunLoop::main().dispatch([callbackAggregator = WTFMove(callbackAggregator), securityOrigins = indexedDatabaseOrigins(path)] {
                 for (const auto& securityOrigin : securityOrigins)
                     callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::IndexedDBDatabases, 0 });
@@ -1717,8 +1717,8 @@
     auto path = m_idbDatabasePaths.get(sessionID);
     if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
         // FIXME: Pick the right database store based on the session ID.
-        postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path), domainsToDeleteAllButCookiesFor]() mutable {
-            RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
+        postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path), domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor)]() mutable {
+            RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = WTFMove(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
                 Vector<SecurityOriginData> entriesToDelete;
                 for (const auto& securityOrigin : securityOrigins) {
                     auto domain = RegistrableDomain::uncheckedCreateFromHost(securityOrigin.host);
@@ -1862,7 +1862,7 @@
     auto path = m_idbDatabasePaths.get(sessionID);
     if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
         // FIXME: Pick the right database store based on the session ID.
-        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {
+        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable {
             RunLoop::main().dispatch([callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
                 for (const auto& securityOrigin : securityOrigins)
                     callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::IndexedDBDatabases, 0 });
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to