⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 248987 in webkit


Ignore:
Timestamp:
Aug 21, 2019, 6:25:43 PM (7 years ago)
Author:
Kocsen Chung
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

Location:
branches/safari-608-branch/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-608-branch/Source/WebKit/ChangeLog

    r248937 r248987  
     12019-08-21  Kocsen Chung  <kocsen_chung@apple.com>
     2
     3        Cherry-pick r248959. rdar://problem/54579630
     4
     5    Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
     6    https://bugs.webkit.org/show_bug.cgi?id=200986
     7    <rdar://problem/32850192>
     8   
     9    Reviewed by Brent Fulgham.
     10   
     11    Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
     12    The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
     13    does not take care of this for you, despite its name (the createCrossThreadTask() function does though).
     14   
     15    * NetworkProcess/NetworkProcess.cpp:
     16    (WebKit::NetworkProcess::fetchWebsiteData):
     17    (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
     18    (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
     19   
     20   
     21    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248959 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     22
     23    2019-08-21  Chris Dumez  <cdumez@apple.com>
     24
     25            Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains()
     26            https://bugs.webkit.org/show_bug.cgi?id=200986
     27            <rdar://problem/32850192>
     28
     29            Reviewed by Brent Fulgham.
     30
     31            Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied.
     32            The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor
     33            does not take care of this for you, despite its name (the createCrossThreadTask() function does though).
     34
     35            * NetworkProcess/NetworkProcess.cpp:
     36            (WebKit::NetworkProcess::fetchWebsiteData):
     37            (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains):
     38            (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
     39
    1402019-08-20  Babak Shafiei  <bshafiei@apple.com>
    241
  • branches/safari-608-branch/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r247283 r248987  
    13401340    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
    13411341        // FIXME: Pick the right database store based on the session ID.
    1342         postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {
     1342        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable {
    13431343            RunLoop::main().dispatch([callbackAggregator = WTFMove(callbackAggregator), securityOrigins = indexedDatabaseOrigins(path)] {
    13441344                for (const auto& securityOrigin : securityOrigins)
     
    17181718    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
    17191719        // FIXME: Pick the right database store based on the session ID.
    1720         postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path), domainsToDeleteAllButCookiesFor]() mutable {
    1721             RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
     1720        postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path), domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor)]() mutable {
     1721            RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = WTFMove(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
    17221722                Vector<SecurityOriginData> entriesToDelete;
    17231723                for (const auto& securityOrigin : securityOrigins) {
     
    18631863    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
    18641864        // FIXME: Pick the right database store based on the session ID.
    1865         postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {
     1865        postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable {
    18661866            RunLoop::main().dispatch([callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {
    18671867                for (const auto& securityOrigin : securityOrigins)
Note: See TracChangeset for help on using the changeset viewer.