⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280083 in webkit


Ignore:
Timestamp:
Jul 20, 2021, 9:54:58 AM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Protect m_data when iterating in CachedRawResource::didAddClient
​https://bugs.webkit.org/show_bug.cgi?id=228108
<rdar://80716674>

Patch by Alex Christensen <​achristensen@webkit.org> on 2021-07-20
Reviewed by Chris Dumez.

I think something is destroying m_data when its segments are being iterated.
Protect it so it doesn't get destroyed.
Also, to be on the safe side, check that the client is still a client before using it.

  • loader/cache/CachedRawResource.cpp:

(WebCore::CachedRawResource::didAddClient):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r280081 r280083  
     12021-07-20  Alex Christensen  <achristensen@webkit.org>
     2
     3        Protect m_data when iterating in CachedRawResource::didAddClient
     4        https://bugs.webkit.org/show_bug.cgi?id=228108
     5        <rdar://80716674>
     6
     7        Reviewed by Chris Dumez.
     8
     9        I think something is destroying m_data when its segments are being iterated.
     10        Protect it so it doesn't get destroyed.
     11        Also, to be on the safe side, check that the client is still a client before using it.
     12
     13        * loader/cache/CachedRawResource.cpp:
     14        (WebCore::CachedRawResource::didAddClient):
     15
    1162021-07-20  Sam Sneddon  <gsnedders@apple.com>
    217
  • trunk/Source/WebCore/loader/cache/CachedRawResource.cpp

    r278849 r280083  
    168168            if (!hasClient(*client))
    169169                return;
    170             if (m_data) {
    171                 m_data->forEachSegment([&](auto& segment) {
    172                     client->dataReceived(*this, segment.data(), segment.size());
     170            if (auto data = m_data) {
     171                data->forEachSegment([&](auto& segment) {
     172                    if (hasClient(*client))
     173                        client->dataReceived(*this, segment.data(), segment.size());
    173174                });
    174175            }
Note: See TracChangeset for help on using the changeset viewer.