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

Changeset 294831 in webkit


Ignore:
Timestamp:
May 25, 2022, 3:45:26 PM (4 years ago)
Author:
Brent Fulgham
Message:

Prevent NSAttributedString crashes when AppSSO URLs are provided
​https://bugs.webkit.org/show_bug.cgi?id=240739
<rdar://93656000>

Reviewed by Chris Dumez.

When NSAttributedString is used in a sandboxed app, it is prevented from checking in with the
AppSSO plugin manager, causing a Sandbox Violation and crash. We don't want NSAttributedString
to ever hand-off to AppSSO, so we should configure it's internal WKWebView to do the right thing.
Reviewed by Chris Dumez.

  • Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm:

(+[_WKAttributedStringWebViewCache configuration]): Turn off AppSSO for string uses.

  • Source/WebKit/UIProcess/Cocoa/NavigationState.mm:

(WebKit::trySOAuthorization): Use new lazy loading approach.

  • Source/WebKit/UIProcess/WebPageProxy.cpp:

(WebKit::trySOAuthorization): Ditto.

  • Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::soAuthorizationCoordinator): Lazily initialize, and RELEASE_ASSERT
if we somehow reach this code without enabling AppSSO.

  • Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:

(WebKit::WebsiteDataStore::soAuthorizationCoordinator): Deleted.

Canonical link: ​https://commits.webkit.org/250981@main

Location:
trunk/Source/WebKit/UIProcess
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm

    r282889 r294831  
    11/*
    2  * Copyright (C) 2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    145145        [configuration _setAllowsMetaRefresh:NO];
    146146        [configuration _setAttachmentElementEnabled:YES];
     147        [configuration preferences]._extensibleSSOEnabled = NO;
    147148        [configuration _setInvisibleAutoplayNotPermitted:YES];
    148149        [configuration _setMediaDataLoadsAutomatically:NO];
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm

    r292912 r294831  
    425425        return;
    426426    }
    427     page.websiteDataStore().soAuthorizationCoordinator().tryAuthorize(WTFMove(navigationAction), page, WTFMove(completionHandler));
     427    page.websiteDataStore().soAuthorizationCoordinator(page).tryAuthorize(WTFMove(navigationAction), page, WTFMove(completionHandler));
    428428#else
    429429    completionHandler(false);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r294830 r294831  
    59975997{
    59985998#if HAVE(APP_SSO)
    5999     page.websiteDataStore().soAuthorizationCoordinator().tryAuthorize(WTFMove(navigationAction), page, WTFMove(newPageCallback), WTFMove(uiClientCallback));
     5999    page.websiteDataStore().soAuthorizationCoordinator(page).tryAuthorize(WTFMove(navigationAction), page, WTFMove(newPageCallback), WTFMove(uiClientCallback));
    60006000#else
    60016001    uiClientCallback(WTFMove(navigationAction), WTFMove(newPageCallback));
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r294802 r294831  
    11/*
    2  * Copyright (C) 2014-2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    136136#endif
    137137    , m_client(makeUniqueRef<WebsiteDataStoreClient>())
    138 #if HAVE(APP_SSO)
    139     , m_soAuthorizationCoordinator(makeUniqueRef<SOAuthorizationCoordinator>())
    140 #endif
    141138    , m_webLockRegistry(WebCore::LocalWebLockRegistry::create())
    142139{
    … …  
    208205    return allDataStores().get(sessionID);
    209206}
     207
     208#if HAVE(APP_SSO)
     209SOAuthorizationCoordinator& WebsiteDataStore::soAuthorizationCoordinator(const WebPageProxy& pageProxy)
     210{
     211    RELEASE_ASSERT(pageProxy.preferences().isExtensibleSSOEnabled());
     212    if (!m_soAuthorizationCoordinator)
     213        m_soAuthorizationCoordinator = WTF::makeUnique<SOAuthorizationCoordinator>();
     214
     215    return *m_soAuthorizationCoordinator;
     216}
     217#endif
    210218
    211219static Ref<NetworkProcessProxy> networkProcessForSession(PAL::SessionID sessionID)
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r294820 r294831  
    11/*
    2  * Copyright (C) 2014-2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
    … …  
    337337
    338338#if HAVE(APP_SSO)
    339     SOAuthorizationCoordinator& soAuthorizationCoordinator() { return m_soAuthorizationCoordinator.get(); }
     339    SOAuthorizationCoordinator& soAuthorizationCoordinator(const WebPageProxy&);
    340340#endif
    341341
    … …  
    489489
    490490#if HAVE(APP_SSO)
    491     UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
     491    std::unique_ptr<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
    492492#endif
    493493#if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
Note: See TracChangeset for help on using the changeset viewer.