fix(patch-update): extend V8 Object API deprecation patch for Node.js

Extended the existing patch to cover additional files that use
GetAlignedPointerFromInternalField and SetAlignedPointerInInternalField:
- src/stream_base-inl.h
- src/udp_wrap.cc
- src/js_udp_wrap.cc
- src/node_process_methods.cc
- src/node_snapshotable.cc
- src/base_object.cc

These APIs now require an EmbedderDataTypeTag parameter.

Ref: https://chromium-review.googlesource.com/c/v8/v8/+/7087956
This commit is contained in:
Keeley Hammond
2026-01-27 17:33:50 -08:00
parent 096c1b7aa9
commit 4e20cb13b3

View File

@@ -43,6 +43,20 @@ index 37d83e41b618a07aca98118260abe9618f11256d..26d5c1bd3c8191fce1d22b969996b6bf
}
template <typename T>
diff --git a/src/base_object.cc b/src/base_object.cc
index 404e2aa8c88d0cc0e6717c01e0df68899c64cc32..16462f305a2ac6b6c3d7b85024f2e52648c4300c 100644
--- a/src/base_object.cc
+++ b/src/base_object.cc
@@ -45,7 +45,8 @@ BaseObject::~BaseObject() {
{
HandleScope handle_scope(realm()->isolate());
- object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
+ object()->SetAlignedPointerInInternalField(
+ BaseObject::kSlot, nullptr, v8::kEmbedderDataTypeTagDefault);
}
}
diff --git a/src/env-inl.h b/src/env-inl.h
index 97c43afb487b58c0c77bd59b4a6b6d7a13690053..23a4d7b651935a4029249fb2f1dd3ed46ea3b26f 100644
--- a/src/env-inl.h
@@ -57,6 +71,22 @@ index 97c43afb487b58c0c77bd59b4a6b6d7a13690053..23a4d7b651935a4029249fb2f1dd3ed4
}
inline Environment* Environment::GetCurrent(
diff --git a/src/js_udp_wrap.cc b/src/js_udp_wrap.cc
index 51e4f8c45ffd38fcf925ab8d283b3b88f2a35832..0c30c8b4609e4870c0ccfc5e9e465248c20763b8 100644
--- a/src/js_udp_wrap.cc
+++ b/src/js_udp_wrap.cc
@@ -55,8 +55,9 @@ JSUDPWrap::JSUDPWrap(Environment* env, Local<Object> obj)
: AsyncWrap(env, obj, PROVIDER_JSUDPWRAP) {
MakeWeak();
- obj->SetAlignedPointerInInternalField(
- kUDPWrapBaseField, static_cast<UDPWrapBase*>(this));
+ obj->SetAlignedPointerInInternalField(kUDPWrapBaseField,
+ static_cast<UDPWrapBase*>(this),
+ v8::kEmbedderDataTypeTagDefault);
}
int JSUDPWrap::RecvStart() {
diff --git a/src/node_context_data.h b/src/node_context_data.h
index d81c75daaae47b8b0b489cf357a32e437e7a6cf7..b0aab2f7b2538b6e2cacc9ffd52473b7b4ffff38 100644
--- a/src/node_context_data.h
@@ -103,6 +133,21 @@ index cb13d84388bcc6806d3b038a51e1cc2d1feccda1..687b2cf3e63b2a3306e2cbac67e3e216
persistent().Reset(v8::Isolate::GetCurrent(), handle);
MakeWeak();
}
diff --git a/src/node_process_methods.cc b/src/node_process_methods.cc
index fe4aad63bc877be105830a80aa6be10ce3f8fda4..588b1fef718853bec95a4e4a3b14809a0e7018ea 100644
--- a/src/node_process_methods.cc
+++ b/src/node_process_methods.cc
@@ -672,8 +672,8 @@ void BindingData::RegisterExternalReferences(
BindingData* BindingData::FromV8Value(Local<Value> value) {
Local<Object> v8_object = value.As<Object>();
- return static_cast<BindingData*>(
- v8_object->GetAlignedPointerFromInternalField(BaseObject::kSlot));
+ return static_cast<BindingData*>(v8_object->GetAlignedPointerFromInternalField(
+ BaseObject::kSlot, v8::kEmbedderDataTypeTagDefault));
}
void BindingData::MemoryInfo(MemoryTracker* tracker) const {
diff --git a/src/node_realm-inl.h b/src/node_realm-inl.h
index f162d1506c990a5fe578be6f1324427e3f9023f4..b57bb0b42e98b954c0c8662c667e589d6c68a5d3 100644
--- a/src/node_realm-inl.h
@@ -117,3 +162,118 @@ index f162d1506c990a5fe578be6f1324427e3f9023f4..b57bb0b42e98b954c0c8662c667e589d
}
inline Realm* Realm::GetCurrent(
diff --git a/src/node_snapshotable.cc b/src/node_snapshotable.cc
index e34d24d51d5c090b560d06f727043f20924e6f46..07615933c858a17515836a29f7e27ace4b81e6ff 100644
--- a/src/node_snapshotable.cc
+++ b/src/node_snapshotable.cc
@@ -1400,7 +1400,8 @@ StartupData SerializeNodeContextInternalFields(Local<Object> holder,
// For the moment we do not set any internal fields in ArrayBuffer
// or ArrayBufferViews, so just return nullptr.
if (holder->IsArrayBuffer() || holder->IsArrayBufferView()) {
- CHECK_NULL(holder->GetAlignedPointerFromInternalField(index));
+ CHECK_NULL(holder->GetAlignedPointerFromInternalField(
+ index, v8::kEmbedderDataTypeTagDefault));
return StartupData{nullptr, 0};
}
@@ -1420,7 +1421,8 @@ StartupData SerializeNodeContextInternalFields(Local<Object> holder,
*holder);
BaseObject* object_ptr = static_cast<BaseObject*>(
- holder->GetAlignedPointerFromInternalField(BaseObject::kSlot));
+ holder->GetAlignedPointerFromInternalField(
+ BaseObject::kSlot, v8::kEmbedderDataTypeTagDefault));
// If the native object is already set to null, ignore it.
if (object_ptr == nullptr) {
return StartupData{nullptr, 0};
diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h
index 29a4c29f3d3822394d23c453899cdd6aae280f3f..2a953d6390d5e4e251e54c1e847d4e5e25785065 100644
--- a/src/stream_base-inl.h
+++ b/src/stream_base-inl.h
@@ -19,22 +19,22 @@ StreamReq::StreamReq(
void StreamReq::AttachToObject(v8::Local<v8::Object> req_wrap_obj) {
CHECK_EQ(req_wrap_obj->GetAlignedPointerFromInternalField(
- StreamReq::kStreamReqField),
+ StreamReq::kStreamReqField, v8::kEmbedderDataTypeTagDefault),
nullptr);
req_wrap_obj->SetAlignedPointerInInternalField(
- StreamReq::kStreamReqField, this);
+ StreamReq::kStreamReqField, this, v8::kEmbedderDataTypeTagDefault);
}
StreamReq* StreamReq::FromObject(v8::Local<v8::Object> req_wrap_obj) {
return static_cast<StreamReq*>(
req_wrap_obj->GetAlignedPointerFromInternalField(
- StreamReq::kStreamReqField));
+ StreamReq::kStreamReqField, v8::kEmbedderDataTypeTagDefault));
}
void StreamReq::Dispose() {
BaseObjectPtr<AsyncWrap> destroy_me{GetAsyncWrap()};
object()->SetAlignedPointerInInternalField(
- StreamReq::kStreamReqField, nullptr);
+ StreamReq::kStreamReqField, nullptr, v8::kEmbedderDataTypeTagDefault);
destroy_me->Detach();
}
@@ -120,16 +120,17 @@ SimpleWriteWrap<OtherBase>::SimpleWriteWrap(
void StreamBase::AttachToObject(v8::Local<v8::Object> obj) {
obj->SetAlignedPointerInInternalField(
- StreamBase::kStreamBaseField, this);
+ StreamBase::kStreamBaseField, this, v8::kEmbedderDataTypeTagDefault);
}
StreamBase* StreamBase::FromObject(v8::Local<v8::Object> obj) {
- if (obj->GetAlignedPointerFromInternalField(StreamBase::kSlot) == nullptr)
+ if (obj->GetAlignedPointerFromInternalField(
+ StreamBase::kSlot, v8::kEmbedderDataTypeTagDefault) == nullptr)
return nullptr;
return static_cast<StreamBase*>(
obj->GetAlignedPointerFromInternalField(
- StreamBase::kStreamBaseField));
+ StreamBase::kStreamBaseField, v8::kEmbedderDataTypeTagDefault));
}
WriteWrap* WriteWrap::FromObject(v8::Local<v8::Object> req_wrap_obj) {
@@ -162,8 +163,10 @@ void WriteWrap::SetBackingStore(std::unique_ptr<v8::BackingStore> bs) {
void StreamReq::ResetObject(v8::Local<v8::Object> obj) {
DCHECK_GT(obj->InternalFieldCount(), StreamReq::kStreamReqField);
- obj->SetAlignedPointerInInternalField(StreamReq::kSlot, nullptr);
- obj->SetAlignedPointerInInternalField(StreamReq::kStreamReqField, nullptr);
+ obj->SetAlignedPointerInInternalField(
+ StreamReq::kSlot, nullptr, v8::kEmbedderDataTypeTagDefault);
+ obj->SetAlignedPointerInInternalField(
+ StreamReq::kStreamReqField, nullptr, v8::kEmbedderDataTypeTagDefault);
}
} // namespace node
diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc
index 150ef0f0400bed9df4f4b1a4c20ec4045ef7a5f6..2ca2ac177c6b5edc3b40712a40ff4a36e96904dc 100644
--- a/src/udp_wrap.cc
+++ b/src/udp_wrap.cc
@@ -126,8 +126,8 @@ void UDPWrapBase::set_listener(UDPListener* listener) {
UDPWrapBase* UDPWrapBase::FromObject(Local<Object> obj) {
CHECK_GT(obj->InternalFieldCount(), UDPWrapBase::kUDPWrapBaseField);
- return static_cast<UDPWrapBase*>(
- obj->GetAlignedPointerFromInternalField(UDPWrapBase::kUDPWrapBaseField));
+ return static_cast<UDPWrapBase*>(obj->GetAlignedPointerFromInternalField(
+ UDPWrapBase::kUDPWrapBaseField, v8::kEmbedderDataTypeTagDefault));
}
void UDPWrapBase::AddMethods(Environment* env, Local<FunctionTemplate> t) {
@@ -147,7 +147,9 @@ UDPWrap::UDPWrap(Environment* env, Local<Object> object)
reinterpret_cast<uv_handle_t*>(&handle_),
AsyncWrap::PROVIDER_UDPWRAP) {
object->SetAlignedPointerInInternalField(
- UDPWrapBase::kUDPWrapBaseField, static_cast<UDPWrapBase*>(this));
+ UDPWrapBase::kUDPWrapBaseField,
+ static_cast<UDPWrapBase*>(this),
+ v8::kEmbedderDataTypeTagDefault);
int r = uv_udp_init(env->event_loop(), &handle_);
CHECK_EQ(r, 0); // can't fail anyway