mirror of
https://github.com/electron/electron.git
synced 2026-02-19 03:14:51 -05:00
7000847: add type tag to v8::External calls in callback and osr_converter
The v8::External API now requires an EmbedderPointerTypeTag parameter for both New() and Value() methods to improve V8 sandbox type safety. Updated calls in: - callback.cc: TranslatorHolder constructor and CallTranslator - osr_converter.cc: OffscreenSharedTextureValue converter Ref: https://chromium-review.googlesource.com/c/v8/v8/+/7000847
This commit is contained in:
@@ -87,10 +87,12 @@ v8::Local<v8::Value> Converter<electron::OffscreenSharedTextureValue>::ToV8(
|
||||
// GC collects the object.
|
||||
auto* monitor = new OffscreenReleaseHolderMonitor(val.releaser_holder);
|
||||
|
||||
auto releaserHolder = v8::External::New(isolate, monitor);
|
||||
auto releaserHolder =
|
||||
v8::External::New(isolate, monitor, v8::kExternalPointerTypeTagDefault);
|
||||
auto releaserFunc = [](const v8::FunctionCallbackInfo<v8::Value>& info) {
|
||||
auto* mon = static_cast<OffscreenReleaseHolderMonitor*>(
|
||||
info.Data().As<v8::External>()->Value());
|
||||
info.Data().As<v8::External>()->Value(
|
||||
v8::kExternalPointerTypeTagDefault));
|
||||
// Release the shared texture, so that future frames can be generated.
|
||||
mon->ReleaseTexture();
|
||||
// Release the monitor happens at GC, don't release here.
|
||||
|
||||
@@ -14,7 +14,10 @@ namespace {
|
||||
|
||||
struct TranslatorHolder {
|
||||
explicit TranslatorHolder(v8::Isolate* isolate)
|
||||
: handle(isolate, v8::External::New(isolate, this)) {
|
||||
: handle(isolate,
|
||||
v8::External::New(isolate,
|
||||
this,
|
||||
v8::kExternalPointerTypeTagDefault)) {
|
||||
handle.SetWeak(this, &GC, v8::WeakCallbackType::kParameter);
|
||||
}
|
||||
~TranslatorHolder() {
|
||||
@@ -57,7 +60,8 @@ void CallTranslator(v8::Local<v8::External> external,
|
||||
}
|
||||
}
|
||||
|
||||
auto* holder = static_cast<TranslatorHolder*>(external->Value());
|
||||
auto* holder = static_cast<TranslatorHolder*>(
|
||||
external->Value(v8::kExternalPointerTypeTagDefault));
|
||||
holder->translator.Run(args);
|
||||
|
||||
// Free immediately for one-time callback.
|
||||
|
||||
Reference in New Issue
Block a user