fix: in Emit()
, don't leak converted Arg Local<Values>
into caller's scope (#43729)
fix: Emit() should not leak converted arg handles into caller's HandleScope
This commit is contained in:
parent
aa719a4066
commit
5a76655fb8
1 changed files with 6 additions and 3 deletions
|
@ -44,11 +44,13 @@ v8::Local<v8::Value> EmitEvent(v8::Isolate* isolate,
|
|||
v8::Local<v8::Object> obj,
|
||||
const StringType& name,
|
||||
Args&&... args) {
|
||||
v8::EscapableHandleScope scope{isolate};
|
||||
internal::ValueVector converted_args = {
|
||||
gin::StringToV8(isolate, name),
|
||||
gin::ConvertToV8(isolate, std::forward<Args>(args))...,
|
||||
};
|
||||
return internal::CallMethodWithArgs(isolate, obj, "emit", &converted_args);
|
||||
return scope.Escape(
|
||||
internal::CallMethodWithArgs(isolate, obj, "emit", &converted_args));
|
||||
}
|
||||
|
||||
// obj.custom_emit(args...)
|
||||
|
@ -57,11 +59,12 @@ v8::Local<v8::Value> CustomEmit(v8::Isolate* isolate,
|
|||
v8::Local<v8::Object> object,
|
||||
const char* custom_emit,
|
||||
Args&&... args) {
|
||||
v8::EscapableHandleScope scope{isolate};
|
||||
internal::ValueVector converted_args = {
|
||||
gin::ConvertToV8(isolate, std::forward<Args>(args))...,
|
||||
};
|
||||
return internal::CallMethodWithArgs(isolate, object, custom_emit,
|
||||
&converted_args);
|
||||
return scope.Escape(internal::CallMethodWithArgs(isolate, object, custom_emit,
|
||||
&converted_args));
|
||||
}
|
||||
|
||||
template <typename T, typename... Args>
|
||||
|
|
Loading…
Reference in a new issue