Title: [227269] trunk/Source/WebKit
Revision
227269
Author
cdu...@apple.com
Date
2018-01-20 02:43:38 -0800 (Sat, 20 Jan 2018)

Log Message

DOMCache data sometimes not properly removed when clearing data for a given origin
https://bugs.webkit.org/show_bug.cgi?id=181887
<rdar://problem/36671239>

Reviewed by Youenn Fablet.

* NetworkProcess/cache/CacheStorageEngine.cpp:
(WebKit::CacheStorage::Engine::clearCachesForOrigin):
This code was iterating through folders on disk, then reading the folder's origin
from the origin file on disk. Then, if the origin would match the one we want to
delete, it would regenerate the folder path using cachesRootPath(*folderOrigin).
I don't know how but on my machine, I was ended up in a state where the path
generated by cachesRootPath(*folderOrigin) differed from the actual folder path
we read the origin from (Likely a different salt?). To make the code more robust,
I updated the code to delete "folderPath", which is the path we read the origin
from.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (227268 => 227269)


--- trunk/Source/WebKit/ChangeLog	2018-01-20 08:42:08 UTC (rev 227268)
+++ trunk/Source/WebKit/ChangeLog	2018-01-20 10:43:38 UTC (rev 227269)
@@ -1,3 +1,22 @@
+2018-01-20  Chris Dumez  <cdu...@apple.com>
+
+        DOMCache data sometimes not properly removed when clearing data for a given origin
+        https://bugs.webkit.org/show_bug.cgi?id=181887
+        <rdar://problem/36671239>
+
+        Reviewed by Youenn Fablet.
+
+        * NetworkProcess/cache/CacheStorageEngine.cpp:
+        (WebKit::CacheStorage::Engine::clearCachesForOrigin):
+        This code was iterating through folders on disk, then reading the folder's origin
+        from the origin file on disk. Then, if the origin would match the one we want to
+        delete, it would regenerate the folder path using cachesRootPath(*folderOrigin).
+        I don't know how but on my machine, I was ended up in a state where the path
+        generated by cachesRootPath(*folderOrigin) differed from the actual folder path
+        we read the origin from (Likely a different salt?). To make the code more robust,
+        I updated the code to delete "folderPath", which is the path we read the origin
+        from.
+
 2018-01-19  Zach Li  <zacharyli...@gmail.com>
 
         Expose Safe Browsing SPI

Modified: trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp (227268 => 227269)


--- trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp	2018-01-20 08:42:08 UTC (rev 227268)
+++ trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp	2018-01-20 10:43:38 UTC (rev 227269)
@@ -414,13 +414,13 @@
     for (auto& folderPath : WebCore::FileSystem::listDirectory(m_rootPath, "*")) {
         if (!WebCore::FileSystem::fileIsDirectory(folderPath, WebCore::FileSystem::ShouldFollowSymbolicLinks::No))
             continue;
-        Caches::retrieveOriginFromDirectory(folderPath, *m_ioQueue, [this, protectedThis = makeRef(*this), origin, taskHandler = makeRef(taskHandler)] (std::optional<WebCore::ClientOrigin>&& folderOrigin) mutable {
+        Caches::retrieveOriginFromDirectory(folderPath, *m_ioQueue, [this, protectedThis = makeRef(*this), origin, taskHandler = makeRef(taskHandler), folderPath] (std::optional<WebCore::ClientOrigin>&& folderOrigin) mutable {
             if (!folderOrigin)
                 return;
             if (folderOrigin->topOrigin != origin && folderOrigin->clientOrigin != origin)
                 return;
 
-            m_ioQueue->dispatch([path = cachesRootPath(*folderOrigin), taskHandler = WTFMove(taskHandler)] {
+            m_ioQueue->dispatch([path = folderPath.isolatedCopy(), taskHandler = WTFMove(taskHandler)] {
                 deleteDirectoryRecursively(path);
             });
         });
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to