Changeset 181424 in webkit


Ignore:
Timestamp:
Mar 11, 2015 7:01:42 PM (9 years ago)
Author:
Antti Koivisto
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.

Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r181423 r181424  
     12015-03-11  Antti Koivisto  <antti@apple.com>
     2
     3        Cache traversal missing large entries
     4        https://bugs.webkit.org/show_bug.cgi?id=142601
     5
     6        Reviewed by Andreas Kling.
     7
     8        When traversing cache entries we only read the header data from disk. This didn't work
     9        correctly for entries larger than the read size.
     10
     11        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
     12        (WebKit::NetworkCache::IOChannel::read):
     13
     14            Partial reads only receive one callback with 'done' set to true.
     15            Ensure we actually return data in this case.
     16
     17        * NetworkProcess/cache/NetworkCacheStorage.cpp:
     18        (WebKit::NetworkCache::decodeEntryHeader):
     19
     20            Add some logging.
     21
    1222015-03-11  Eric Carlson  <eric.carlson@apple.com>
    223
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm

    r181161 r181424  
    8181    bool didCallCompletionHandler = false;
    8282    dispatch_io_read(m_dispatchIO.get(), offset, size, dispatch_get_main_queue(), [channel, completionHandler, didCallCompletionHandler](bool done, dispatch_data_t fileData, int error) mutable {
    83         if (done) {
    84             if (!didCallCompletionHandler) {
    85                 Data nullData;
    86                 completionHandler(nullData, error);
    87             }
     83        ASSERT_UNUSED(done, done || !didCallCompletionHandler);
     84        if (didCallCompletionHandler)
    8885            return;
    89         }
    90         ASSERT(!didCallCompletionHandler);
    9186        DispatchPtr<dispatch_data_t> fileDataPtr(fileData);
    9287        Data data(fileDataPtr);
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp

    r181364 r181424  
    180180static bool decodeEntryHeader(const Data& fileData, EntryMetaData& metaData, Data& data)
    181181{
    182     if (!decodeEntryMetaData(metaData, fileData))
     182    if (!decodeEntryMetaData(metaData, fileData)) {
     183        LOG(NetworkCacheStorage, "(NetworkProcess) meta data decode failure");
    183184        return false;
    184     if (metaData.cacheStorageVersion != Storage::version)
     185    }
     186
     187    if (metaData.cacheStorageVersion != Storage::version) {
     188        LOG(NetworkCacheStorage, "(NetworkProcess) version mismatch");
    185189        return false;
    186     if (metaData.headerOffset + metaData.headerSize > metaData.bodyOffset)
     190    }
     191    if (metaData.headerOffset + metaData.headerSize > metaData.bodyOffset) {
     192        LOG(NetworkCacheStorage, "(NetworkProcess) body offset mismatch");
    187193        return false;
     194    }
    188195
    189196    auto headerData = fileData.subrange(metaData.headerOffset, metaData.headerSize);
Note: See TracChangeset for help on using the changeset viewer.