| // Copyright 2021 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "fxjs/cfx_v8_array_buffer_allocator.h" |
| |
| #include "core/fxcrt/fx_memory.h" |
| |
| CFX_V8ArrayBufferAllocator::CFX_V8ArrayBufferAllocator() = default; |
| |
| CFX_V8ArrayBufferAllocator::~CFX_V8ArrayBufferAllocator() = default; |
| |
| // NOTE: Under V8 sandbox mode, defer NewDefaultAllocator() call until |
| // first use, since V8 must be initialized first for it to succeed, but |
| // we need the allocator in order to initialize V8. |
| |
| void* CFX_V8ArrayBufferAllocator::Allocate(size_t length) { |
| if (length > kMaxAllowedBytes) |
| return nullptr; |
| #ifdef V8_ENABLE_SANDBOX |
| if (!wrapped_) { |
| wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator()); |
| } |
| return wrapped_->Allocate(length); |
| #else // V8_ENABLE_SANDBOX |
| return FX_ArrayBufferAllocate(length); |
| #endif // V8_ENABLE_SANDBOX |
| } |
| |
| void* CFX_V8ArrayBufferAllocator::AllocateUninitialized(size_t length) { |
| if (length > kMaxAllowedBytes) |
| return nullptr; |
| #ifdef V8_ENABLE_SANDBOX |
| if (!wrapped_) { |
| wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator()); |
| } |
| return wrapped_->AllocateUninitialized(length); |
| #else // V8_ENABLE_SANDBOX |
| return FX_ArrayBufferAllocateUninitialized(length); |
| #endif |
| } |
| |
| void CFX_V8ArrayBufferAllocator::Free(void* data, size_t length) { |
| #ifdef V8_ENABLE_SANDBOX |
| if (wrapped_) { |
| wrapped_->Free(data, length); |
| } |
| #else // V8_ENABLE_SANDBOX |
| FX_ArrayBufferFree(data); |
| #endif |
| } |