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