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

Changeset 254092 in webkit


Ignore:
Timestamp:
Jan 6, 2020, 3:32:31 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

NetworkSessionCocoa::isolatedSession should not use iterator after mutating m_isolatedSessions
​https://bugs.webkit.org/show_bug.cgi?id=205824
<rdar://problem/55107625>

Patch by Alex Christensen <​achristensen@webkit.org> on 2020-01-06
Reviewed by Chris Dumez.

Classic iterator use after mutating iterated container was causing crashes by returning a null SessionWrapper&
This was introduced in r252185 or r248640.

  • NetworkProcess/cocoa/NetworkSessionCocoa.mm:

(WebKit::NetworkSessionCocoa::isolatedSession):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r254087 r254092  
     12020-01-06  Alex Christensen  <achristensen@webkit.org>
     2
     3        NetworkSessionCocoa::isolatedSession should not use iterator after mutating m_isolatedSessions
     4        https://bugs.webkit.org/show_bug.cgi?id=205824
     5        <rdar://problem/55107625>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Classic iterator use after mutating iterated container was causing crashes by returning a null SessionWrapper&
     10        This was introduced in r252185 or r248640.
     11
     12        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     13        (WebKit::NetworkSessionCocoa::isolatedSession):
     14
    1152020-01-06  Mark Lam  <mark.lam@apple.com>
    216
  • trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r254087 r254092  
    11791179    entry->lastUsed = WallTime::now();
    11801180
     1181    auto& sessionWrapper = [&] (auto storedCredentialsPolicy) -> SessionWrapper& {
     1182        switch (storedCredentialsPolicy) {
     1183        case WebCore::StoredCredentialsPolicy::Use:
     1184            LOG(NetworkSession, "Using isolated NSURLSession with credential storage.");
     1185            return entry->sessionWithCredentialStorage;
     1186        case WebCore::StoredCredentialsPolicy::DoNotUse:
     1187            LOG(NetworkSession, "Using isolated NSURLSession without credential storage.");
     1188            return entry->sessionWithoutCredentialStorage;
     1189        case WebCore::StoredCredentialsPolicy::EphemeralStateless:
     1190            if (!m_ephemeralStatelessSession.session)
     1191                initializeEphemeralStatelessSession();
     1192            return m_ephemeralStatelessSession;
     1193        }
     1194    } (storedCredentialsPolicy);
     1195   
    11811196    if (m_isolatedSessions.size() > maxNumberOfIsolatedSessions) {
    11821197        WebCore::RegistrableDomain keyToRemove;
    … …  
    11951210    RELEASE_ASSERT(m_isolatedSessions.size() <= maxNumberOfIsolatedSessions);
    11961211
    1197     switch (storedCredentialsPolicy) {
    1198     case WebCore::StoredCredentialsPolicy::Use:
    1199         LOG(NetworkSession, "Using isolated NSURLSession with credential storage.");
    1200         return entry->sessionWithCredentialStorage;
    1201     case WebCore::StoredCredentialsPolicy::DoNotUse:
    1202         LOG(NetworkSession, "Using isolated NSURLSession without credential storage.");
    1203         return entry->sessionWithoutCredentialStorage;
    1204     case WebCore::StoredCredentialsPolicy::EphemeralStateless:
    1205         if (!m_ephemeralStatelessSession.session)
    1206             initializeEphemeralStatelessSession();
    1207         return m_ephemeralStatelessSession;
    1208     }
     1212    return sessionWrapper;
    12091213}
    12101214
Note: See TracChangeset for help on using the changeset viewer.