Changeset 248959 in webkit
- Timestamp:
- Aug 21, 2019, 1:02:35 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/NetworkProcess.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r248957 r248959 1 2019-08-21 Chris Dumez <cdumez@apple.com> 2 3 Crash under StringImpl::~StringImpl() in NetworkProcess::deleteWebsiteDataForRegistrableDomains() 4 https://bugs.webkit.org/show_bug.cgi?id=200986 5 <rdar://problem/32850192> 6 7 Reviewed by Brent Fulgham. 8 9 Code was calling postStorageTask() with a lambda that captures Strings that are not isolated copied. 10 The lambda would get executed on another thread so this is not safe. The CrossThreadTask constructor 11 does not take care of this for you, despite its name (the createCrossThreadTask() function does though). 12 13 * NetworkProcess/NetworkProcess.cpp: 14 (WebKit::NetworkProcess::fetchWebsiteData): 15 (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains): 16 (WebKit::NetworkProcess::registrableDomainsWithWebsiteData): 17 1 18 2019-08-21 Chris Dumez <cdumez@apple.com> 2 19 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r248956 r248959 1361 1361 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) { 1362 1362 // FIXME: Pick the right database store based on the session ID. 1363 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {1363 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable { 1364 1364 RunLoop::main().dispatch([callbackAggregator = WTFMove(callbackAggregator), securityOrigins = indexedDatabaseOrigins(path)] { 1365 1365 for (const auto& securityOrigin : securityOrigins) … … 1733 1733 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) { 1734 1734 // FIXME: Pick the right database store based on the session ID. 1735 postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path), domainsToDeleteAllButCookiesFor]() mutable {1736 RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] {1735 postStorageTask(CrossThreadTask([this, sessionID, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path), domainsToDeleteAllButCookiesFor = crossThreadCopy(domainsToDeleteAllButCookiesFor)]() mutable { 1736 RunLoop::main().dispatch([this, sessionID, domainsToDeleteAllButCookiesFor = WTFMove(domainsToDeleteAllButCookiesFor), callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] { 1737 1737 Vector<SecurityOriginData> entriesToDelete; 1738 1738 for (const auto& securityOrigin : securityOrigins) { … … 1879 1879 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) { 1880 1880 // FIXME: Pick the right database store based on the session ID. 1881 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable {1881 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = crossThreadCopy(path)]() mutable { 1882 1882 RunLoop::main().dispatch([callbackAggregator = callbackAggregator.copyRef(), securityOrigins = indexedDatabaseOrigins(path)] { 1883 1883 for (const auto& securityOrigin : securityOrigins)
Note:
See TracChangeset
for help on using the changeset viewer.