chore: bump node to v16.17.0 (main) (#35350)
* chore: bump node in DEPS to v16.17.0
* chore: fixup asar patch
* lib: use null-prototype objects for property descriptors
https://github.com/nodejs/node/pull/43270
* src: make SecureContext fields private
https://github.com/nodejs/node/pull/43173
* crypto: remove Node.js-specific webcrypto extensions
https://github.com/nodejs/node/pull/43310
* test: refactor to top-level await
https://github.com/nodejs/node/pull/43500
* deps: cherry-pick two libuv fixes
https://github.com/nodejs/node/pull/43950
* src: slim down env-inl.h
https://github.com/nodejs/node/pull/43745
* util: add AggregateError.prototype.errors to inspect output
https://github.com/nodejs/node/pull/43646
* esm: improve performance & tidy tests
https://github.com/nodejs/node/pull/43784
* src: NodeArrayBufferAllocator delegates to v8's allocator
https://github.com/nodejs/node/pull/43594
* chore: update patch indices
* chore: update filenames
* src: refactor IsSupportedAuthenticatedMode
https://github.com/nodejs/node/pull/42368
* src: add --openssl-legacy-provider option
https://github.com/nodejs/node/pull/40478
* lib,src: add source map support for global eval
https://github.com/nodejs/node/pull/43428
* trace_events: trace net connect event
https://github.com/nodejs/node/pull/43903
* deps: update ICU to 71.1
https://github.com/nodejs/node/pull/42655
This fails the test because it's missing 3841093
* lib: give names to promisified exists() and question()
https://github.com/nodejs/node/pull/43218
* crypto: add CFRG curves to Web Crypto API
https://github.com/nodejs/node/pull/42507
* src: fix memory leak for v8.serialize
https://github.com/nodejs/node/pull/42695
This test does not work for Electron as they do not use V8's
ArrayBufferAllocator.
* buffer: fix atob input validation
https://github.com/nodejs/node/pull/42539
* src: fix ssize_t error from nghttp2.h
https://github.com/nodejs/node/pull/44393
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
parent
1847581848
commit
d0e220cbce
37 changed files with 393 additions and 475 deletions
|
@ -45,45 +45,8 @@ This patch should be upstreamed to Node.
|
|||
|
||||
See also: https://source.chromium.org/chromium/chromium/src/+/main:v8/include/v8-cppgc.h;l=70-76;drc=5a758a97032f0b656c3c36a3497560762495501a
|
||||
|
||||
diff --git a/src/base_object-inl.h b/src/base_object-inl.h
|
||||
index bb1e8d4b46bce3bf08f730ac5d43f7113d17ae39..6da0669943fc6465ffc47a1c8c3dadfea6beb1c9 100644
|
||||
--- a/src/base_object-inl.h
|
||||
+++ b/src/base_object-inl.h
|
||||
@@ -32,10 +32,21 @@
|
||||
|
||||
namespace node {
|
||||
|
||||
+namespace {
|
||||
+// This just has to be different from the Chromium ones:
|
||||
+// https://source.chromium.org/chromium/chromium/src/+/main:gin/public/gin_embedders.h;l=18-23;drc=5a758a97032f0b656c3c36a3497560762495501a
|
||||
+// Otherwise, when Node is loaded in an isolate which uses cppgc, cppgc will
|
||||
+// misinterpret the data stored in the embedder fields and try to garbage
|
||||
+// collect them.
|
||||
+static uint16_t kNodeEmbedderId = 0x90de;
|
||||
+}
|
||||
+
|
||||
BaseObject::BaseObject(Environment* env, v8::Local<v8::Object> object)
|
||||
: persistent_handle_(env->isolate(), object), env_(env) {
|
||||
CHECK_EQ(false, object.IsEmpty());
|
||||
- CHECK_GT(object->InternalFieldCount(), 0);
|
||||
+ CHECK_GT(object->InternalFieldCount(), BaseObject::kSlot);
|
||||
+ object->SetAlignedPointerInInternalField(BaseObject::kWrapperType,
|
||||
+ &kNodeEmbedderId);
|
||||
object->SetAlignedPointerInInternalField(
|
||||
BaseObject::kSlot,
|
||||
static_cast<void*>(this));
|
||||
@@ -151,7 +162,8 @@ bool BaseObject::IsWeakOrDetached() const {
|
||||
void BaseObject::LazilyInitializedJSTemplateConstructor(
|
||||
const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||
DCHECK(args.IsConstructCall());
|
||||
- DCHECK_GT(args.This()->InternalFieldCount(), 0);
|
||||
+ DCHECK_GT(args.This()->InternalFieldCount(), BaseObject::kSlot);
|
||||
+ args.This()->SetAlignedPointerInInternalField(BaseObject::kWrapperType, &kNodeEmbedderId);
|
||||
args.This()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
|
||||
}
|
||||
|
||||
diff --git a/src/base_object.h b/src/base_object.h
|
||||
index 1c63da92fd80c042d5ea729bdd70049cae51a141..3b8127e884187b21cebeabb39b60bd3010b62217 100644
|
||||
index 842f763a56d75c55509534e3d44a8080dd283127..b6078fe83c82a5edec0f7652b8c2d1b6c2491ca4 100644
|
||||
--- a/src/base_object.h
|
||||
+++ b/src/base_object.h
|
||||
@@ -40,7 +40,7 @@ class TransferData;
|
||||
|
@ -95,3 +58,39 @@ index 1c63da92fd80c042d5ea729bdd70049cae51a141..3b8127e884187b21cebeabb39b60bd30
|
|||
|
||||
// Associates this object with `object`. It uses the 0th internal field for
|
||||
// that, and in particular aborts if there is no such field.
|
||||
diff --git a/src/env.cc b/src/env.cc
|
||||
index 22be69ec30a5b8466caacc698c791494891e5dee..cc44d578df9e146aa72f8273c1271d6a3c00d610 100644
|
||||
--- a/src/env.cc
|
||||
+++ b/src/env.cc
|
||||
@@ -2119,11 +2119,20 @@ void Environment::RunWeakRefCleanup() {
|
||||
isolate()->ClearKeptObjects();
|
||||
}
|
||||
|
||||
+// This just has to be different from the Chromium ones:
|
||||
+// https://source.chromium.org/chromium/chromium/src/+/main:gin/public/gin_embedders.h;l=18-23;drc=5a758a97032f0b656c3c36a3497560762495501a
|
||||
+// Otherwise, when Node is loaded in an isolate which uses cppgc, cppgc will
|
||||
+// misinterpret the data stored in the embedder fields and try to garbage
|
||||
+// collect them.
|
||||
+uint16_t kNodeEmbedderId = 0x90de;
|
||||
+
|
||||
// Not really any better place than env.cc at this moment.
|
||||
BaseObject::BaseObject(Environment* env, Local<Object> object)
|
||||
: persistent_handle_(env->isolate(), object), env_(env) {
|
||||
CHECK_EQ(false, object.IsEmpty());
|
||||
- CHECK_GT(object->InternalFieldCount(), 0);
|
||||
+ CHECK_GT(object->InternalFieldCount(), BaseObject::kSlot);
|
||||
+ object->SetAlignedPointerInInternalField(BaseObject::kWrapperType,
|
||||
+ &kNodeEmbedderId);
|
||||
object->SetAlignedPointerInInternalField(BaseObject::kSlot,
|
||||
static_cast<void*>(this));
|
||||
env->AddCleanupHook(DeleteMe, static_cast<void*>(this));
|
||||
@@ -2177,7 +2186,8 @@ void BaseObject::MakeWeak() {
|
||||
void BaseObject::LazilyInitializedJSTemplateConstructor(
|
||||
const FunctionCallbackInfo<Value>& args) {
|
||||
DCHECK(args.IsConstructCall());
|
||||
- DCHECK_GT(args.This()->InternalFieldCount(), 0);
|
||||
+ DCHECK_GT(args.This()->InternalFieldCount(), BaseObject::kSlot);
|
||||
+ args.This()->SetAlignedPointerInInternalField(BaseObject::kWrapperType, &kNodeEmbedderId);
|
||||
args.This()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue