Changeset 294692 in webkit


Ignore:
Timestamp:
May 23, 2022, 4:25:36 PM (3 years ago)
Author:
Chris Dumez
Message:

Capture WeakPtr to CachedResourceClient in lambdas in CachedRawResource::didAddClient()
https://bugs.webkit.org/show_bug.cgi?id=240828
<rdar://93781799>

Reviewed by Alex Christensen.

Capture WeakPtr to CachedResourceClient in lambdas in CachedRawResource::didAddClient()
instead of a raw pointer, for hardening.

  • Source/WebCore/loader/cache/CachedRawResource.cpp:

(WebCore::iterateRedirects):
(WebCore::CachedRawResource::didAddClient):

Canonical link: https://commits.webkit.org/250896@main

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/loader/cache/CachedRawResource.cpp

    r292801 r294692  
    151151        return completionHandler({ });
    152152    auto redirectPair = redirectsInReverseOrder.takeLast();
    153     client.redirectReceived(*handle, WTFMove(redirectPair.first), WTFMove(redirectPair.second), [handle = WTFMove(handle), client = &client, redirectsInReverseOrder = WTFMove(redirectsInReverseOrder), completionHandler = WTFMove(completionHandler)] (ResourceRequest&&) mutable {
     153    client.redirectReceived(*handle, WTFMove(redirectPair.first), WTFMove(redirectPair.second), [handle = WTFMove(handle), client = WeakPtr { client }, redirectsInReverseOrder = WTFMove(redirectsInReverseOrder), completionHandler = WTFMove(completionHandler)] (ResourceRequest&&) mutable {
    154154        // Ignore the new request because we can't do anything with it.
    155155        // We're just replying a redirect chain that has already happened.
     156        if (!client)
     157            return completionHandler({ });
    156158        iterateRedirects(WTFMove(handle), *client, WTFMove(redirectsInReverseOrder), WTFMove(completionHandler));
    157159    });
     
    168170        redirectsInReverseOrder.uncheckedAppend(std::make_pair(pair.m_request, pair.m_redirectResponse));
    169171    }
    170     iterateRedirects(CachedResourceHandle<CachedRawResource>(this), client, WTFMove(redirectsInReverseOrder), [this, protectedThis = CachedResourceHandle<CachedRawResource>(this), client = &client] (ResourceRequest&&) mutable {
    171         if (!hasClient(*client))
     172    iterateRedirects(CachedResourceHandle<CachedRawResource>(this), client, WTFMove(redirectsInReverseOrder), [this, protectedThis = CachedResourceHandle<CachedRawResource>(this), client = WeakPtr { client }] (ResourceRequest&&) mutable {
     173        if (!client || !hasClient(*client))
    172174            return;
    173175        auto responseProcessedHandler = [this, protectedThis = WTFMove(protectedThis), client] {
    174             if (!hasClient(*client))
     176            if (!client || !hasClient(*client))
    175177                return;
    176178            if (m_data) {
    177179                m_data->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
    178                     if (hasClient(*client))
     180                    if (!client || hasClient(*client))
    179181                        client->dataReceived(*this, buffer);
    180182                });
    181183            }
    182             if (!hasClient(*client))
     184            if (!client || !hasClient(*client))
    183185                return;
    184186            CachedResource::didAddClient(*client);
Note: See TracChangeset for help on using the changeset viewer.