Title: [181424] trunk/Source/WebKit2
Revision
181424
Author
an...@apple.com
Date
2015-03-11 19:01:42 -0700 (Wed, 11 Mar 2015)

Log Message

Cache traversal missing large entries
https://bugs.webkit.org/show_bug.cgi?id=142601

Reviewed by Andreas Kling.

When traversing cache entries we only read the header data from disk. This didn't work
correctly for entries larger than the read size.

* NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
(WebKit::NetworkCache::IOChannel::read):

    Partial reads only receive one callback with 'done' set to true.
    Ensure we actually return data in this case.

* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::decodeEntryHeader):

    Add some logging.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (181423 => 181424)


--- trunk/Source/WebKit2/ChangeLog	2015-03-12 01:54:06 UTC (rev 181423)
+++ trunk/Source/WebKit2/ChangeLog	2015-03-12 02:01:42 UTC (rev 181424)
@@ -1,3 +1,24 @@
+2015-03-11  Antti Koivisto  <an...@apple.com>
+
+        Cache traversal missing large entries
+        https://bugs.webkit.org/show_bug.cgi?id=142601
+
+        Reviewed by Andreas Kling.
+
+        When traversing cache entries we only read the header data from disk. This didn't work
+        correctly for entries larger than the read size.
+
+        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
+        (WebKit::NetworkCache::IOChannel::read):
+
+            Partial reads only receive one callback with 'done' set to true.
+            Ensure we actually return data in this case.
+
+        * NetworkProcess/cache/NetworkCacheStorage.cpp:
+        (WebKit::NetworkCache::decodeEntryHeader):
+
+            Add some logging.
+
 2015-03-11  Eric Carlson  <eric.carl...@apple.com>
 
         [Mac] Update AirPlay handling

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm (181423 => 181424)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm	2015-03-12 01:54:06 UTC (rev 181423)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm	2015-03-12 02:01:42 UTC (rev 181424)
@@ -80,14 +80,9 @@
     RefPtr<IOChannel> channel(this);
     bool didCallCompletionHandler = false;
     dispatch_io_read(m_dispatchIO.get(), offset, size, dispatch_get_main_queue(), [channel, completionHandler, didCallCompletionHandler](bool done, dispatch_data_t fileData, int error) mutable {
-        if (done) {
-            if (!didCallCompletionHandler) {
-                Data nullData;
-                completionHandler(nullData, error);
-            }
+        ASSERT_UNUSED(done, done || !didCallCompletionHandler);
+        if (didCallCompletionHandler)
             return;
-        }
-        ASSERT(!didCallCompletionHandler);
         DispatchPtr<dispatch_data_t> fileDataPtr(fileData);
         Data data(fileDataPtr);
         completionHandler(data, error);

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp (181423 => 181424)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp	2015-03-12 01:54:06 UTC (rev 181423)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp	2015-03-12 02:01:42 UTC (rev 181424)
@@ -179,12 +179,19 @@
 
 static bool decodeEntryHeader(const Data& fileData, EntryMetaData& metaData, Data& data)
 {
-    if (!decodeEntryMetaData(metaData, fileData))
+    if (!decodeEntryMetaData(metaData, fileData)) {
+        LOG(NetworkCacheStorage, "(NetworkProcess) meta data decode failure");
         return false;
-    if (metaData.cacheStorageVersion != Storage::version)
+    }
+
+    if (metaData.cacheStorageVersion != Storage::version) {
+        LOG(NetworkCacheStorage, "(NetworkProcess) version mismatch");
         return false;
-    if (metaData.headerOffset + metaData.headerSize > metaData.bodyOffset)
+    }
+    if (metaData.headerOffset + metaData.headerSize > metaData.bodyOffset) {
+        LOG(NetworkCacheStorage, "(NetworkProcess) body offset mismatch");
         return false;
+    }
 
     auto headerData = fileData.subrange(metaData.headerOffset, metaData.headerSize);
     if (metaData.headerChecksum != hashData(headerData)) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to