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

Changeset 295181 in webkit


Ignore:
Timestamp:
Jun 2, 2022, 11:45:22 PM (4 years ago)
Author:
Alan Coon
Message:

Cherry-pick 1d5e3b70369b. rdar://problem/93369102

[JSC] Always have non nullptr for WebAssembly.Memory buffer
​https://bugs.webkit.org/show_bug.cgi?id=240510

Reviewed by Mark Lam.

This patch adds CagedUniquePtr to allocate a pointer for that.

  • Source/JavaScriptCore/runtime/ArrayBuffer.cpp: (JSC::ArrayBuffer::makeShared):
  • Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp: (JSC::JSWebAssemblyMemory::buffer):

Canonical link: ​https://commits.webkit.org/250639@main
git-svn-id: ​https://svn.webkit.org/repository/webkit/trunk@294319 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Location:
branches/safari-613-branch/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-613-branch/Source/JavaScriptCore/runtime/ArrayBuffer.cpp

    r284330 r295181  
    333333    m_contents.makeShared();
    334334    m_locked = true;
     335    ASSERT(!isDetached());
    335336}
    336337
  • branches/safari-613-branch/Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp

    r285730 r295181  
    9191
    9292    Ref<Wasm::MemoryHandle> protectedHandle = m_memory->handle();
    93     auto destructor = createSharedTask<void(void*)>([protectedHandle = WTFMove(protectedHandle)] (void*) { });
    94     m_buffer = ArrayBuffer::createFromBytes(m_memory->memory(), m_memory->size(), WTFMove(destructor));
     93    CagedUniquePtr<Gigacage::Primitive, uint8_t> pointerForEmpty;
     94
     95    void* memory = m_memory->memory();
     96    size_t size = m_memory->size();
     97    if (!memory) {
     98        ASSERT(!size);
     99        constexpr unsigned allocationSize = 1;
     100        pointerForEmpty = CagedUniquePtr<Gigacage::Primitive, uint8_t>::tryCreate(allocationSize);
     101        if (!pointerForEmpty) {
     102            throwOutOfMemoryError(globalObject, throwScope);
     103            return nullptr;
     104        }
     105        memory = pointerForEmpty.get(allocationSize);
     106    }
     107    ASSERT(memory);
     108    auto destructor = createSharedTask<void(void*)>([protectedHandle = WTFMove(protectedHandle), pointerForEmpty = WTFMove(pointerForEmpty)] (void*) { });
     109    m_buffer = ArrayBuffer::createFromBytes(memory, size, WTFMove(destructor));
    95110    m_buffer->makeWasmMemory();
    96111    if (m_memory->sharingMode() == Wasm::MemorySharingMode::Shared)
Note: See TracChangeset for help on using the changeset viewer.