blob: c0ddad087f7a59f061deb2b204cf6d03f9a3329b [file] [log] [blame]
K. Moon832a6942022-10-31 20:11:31 +00001// Copyright 2021 The PDFium Authors
Lei Zhang020fbf22021-09-21 21:58:22 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "fxjs/cfx_v8_array_buffer_allocator.h"
8
9#include "core/fxcrt/fx_memory.h"
Lei Zhang020fbf22021-09-21 21:58:22 +000010
Tom Sepeza7e6db42023-01-14 01:36:29 +000011CFX_V8ArrayBufferAllocator::CFX_V8ArrayBufferAllocator() = default;
12
13CFX_V8ArrayBufferAllocator::~CFX_V8ArrayBufferAllocator() = default;
14
15// NOTE: Under V8 sandbox mode, defer NewDefaultAllocator() call until
16// first use, since V8 must be initialized first for it to succeed, but
17// we need the allocator in order to initialize V8.
18
Lei Zhang020fbf22021-09-21 21:58:22 +000019void* CFX_V8ArrayBufferAllocator::Allocate(size_t length) {
20 if (length > kMaxAllowedBytes)
21 return nullptr;
Tom Sepeza7e6db42023-01-14 01:36:29 +000022#ifdef V8_ENABLE_SANDBOX
23 if (!wrapped_) {
24 wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator());
25 }
26 return wrapped_->Allocate(length);
27#else // V8_ENABLE_SANDBOX
Tom Sepez83e6ac32022-08-15 21:24:58 +000028 return FX_ArrayBufferAllocate(length);
Tom Sepeza7e6db42023-01-14 01:36:29 +000029#endif // V8_ENABLE_SANDBOX
Lei Zhang020fbf22021-09-21 21:58:22 +000030}
31
32void* CFX_V8ArrayBufferAllocator::AllocateUninitialized(size_t length) {
33 if (length > kMaxAllowedBytes)
34 return nullptr;
Tom Sepeza7e6db42023-01-14 01:36:29 +000035#ifdef V8_ENABLE_SANDBOX
36 if (!wrapped_) {
37 wrapped_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator());
38 }
39 return wrapped_->AllocateUninitialized(length);
40#else // V8_ENABLE_SANDBOX
Tom Sepez83e6ac32022-08-15 21:24:58 +000041 return FX_ArrayBufferAllocateUninitialized(length);
Tom Sepeza7e6db42023-01-14 01:36:29 +000042#endif
Lei Zhang020fbf22021-09-21 21:58:22 +000043}
44
45void CFX_V8ArrayBufferAllocator::Free(void* data, size_t length) {
Tom Sepeza7e6db42023-01-14 01:36:29 +000046#ifdef V8_ENABLE_SANDBOX
47 if (wrapped_) {
48 wrapped_->Free(data, length);
49 }
50#else // V8_ENABLE_SANDBOX
Tom Sepez83e6ac32022-08-15 21:24:58 +000051 FX_ArrayBufferFree(data);
Tom Sepeza7e6db42023-01-14 01:36:29 +000052#endif
Lei Zhang020fbf22021-09-21 21:58:22 +000053}