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

Changeset 287775 in webkit


Ignore:
Timestamp:
Jan 7, 2022, 11:57:05 AM (5 years ago)
Author:
mmaxfield@apple.com
Message:

Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails
https://bugs.webkit.org/show_bug.cgi?id=232520
<rdar://problem/84829717>

Reviewed by Simon Fraser.

Guard against the possibility of it returning null.

No new tests because there shouldn't be any behavior change after https://bugs.webkit.org/show_bug.cgi?id=232470.
It's still good to do this, though, to be defensive.

  • Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:

(WebKit::RemoteLayerBackingStore::encode const):

  • WebProcess/GPU/graphics/RemoteImageBufferProxy.h:

(WebKit::RemoteImageBufferProxy::createImageBufferBackendHandle):

Location:
trunk/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r287774 r287775  
     12021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails
     4        https://bugs.webkit.org/show_bug.cgi?id=232520
     5        <rdar://problem/84829717>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Guard against the possibility of it returning null.
     10
     11        No new tests because there shouldn't be any behavior change after https://bugs.webkit.org/show_bug.cgi?id=232470.
     12        It's still good to do this, though, to be defensive.
     13
     14        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
     15        (WebKit::RemoteLayerBackingStore::encode const):
     16        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
     17        (WebKit::RemoteImageBufferProxy::createImageBufferBackendHandle):
     18
    1192022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>
    220
  • trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm

    r287774 r287775  
    123123        switch (m_type) {
    124124        case Type::IOSurface:
    125             if (m_frontBuffer.imageBuffer->canMapBackingStore())
    126                 handle = static_cast<AcceleratedImageBufferShareableMappedBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
    127             else
    128                 handle = static_cast<AcceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
     125            if (auto* backend = m_frontBuffer.imageBuffer->ensureBackendCreated()) {
     126                if (m_frontBuffer.imageBuffer->canMapBackingStore())
     127                    handle = static_cast<AcceleratedImageBufferShareableMappedBackend&>(*backend).createImageBufferBackendHandle();
     128                else
     129                    handle = static_cast<AcceleratedImageBufferShareableBackend&>(*backend).createImageBufferBackendHandle();
     130            }
    129131            break;
    130132        case Type::Bitmap:
    131             handle = static_cast<UnacceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
     133            if (auto* backend = m_frontBuffer.imageBuffer->ensureBackendCreated())
     134                handle = static_cast<UnacceleratedImageBufferShareableBackend&>(*backend).createImageBufferBackendHandle();
    132135            break;
    133136        }
     
    138141#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
    139142    std::optional<ImageBufferBackendHandle> displayListHandle;
    140     if (m_frontBuffer.displayListImageBuffer)
    141         displayListHandle = static_cast<CGDisplayListImageBufferBackend&>(*m_frontBuffer.displayListImageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
     143    if (m_frontBuffer.displayListImageBuffer) {
     144        if (auto* backend = m_frontBuffer.displayListImageBuffer->ensureBackendCreated())
     145            displayListHandle = static_cast<CGDisplayListImageBufferBackend&>(*backend).createImageBufferBackendHandle();
     146    }
    142147
    143148    encoder << displayListHandle;
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h

    r287436 r287775  
    7676    ImageBufferBackendHandle createImageBufferBackendHandle()
    7777    {
    78         ensureBackendCreated();
    79         return m_backend->createImageBufferBackendHandle();
     78        if (ensureBackendCreated())
     79            return m_backend->createImageBufferBackendHandle();
     80        return { };
    8081    }
    8182
Note: See TracChangeset for help on using the changeset viewer.