Skip to content

Commit 882902c

Browse files
committed
src: pass along errors from PromiseWrap instantiation
PR-URL: #25734 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> PR-URL: #25837 Reviewed-By: Michaël Zasso <targos@protonmail.com>
1 parent cdf3e84 commit 882902c

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/async_wrap.cc

+12-10
Original file line numberDiff line numberDiff line change
@@ -204,16 +204,16 @@ PromiseWrap* PromiseWrap::New(Environment* env,
204204
Local<Promise> promise,
205205
PromiseWrap* parent_wrap,
206206
bool silent) {
207-
Local<Object> object = env->promise_wrap_template()
208-
->NewInstance(env->context()).ToLocalChecked();
209-
object->SetInternalField(PromiseWrap::kPromiseField, promise);
210-
object->SetInternalField(PromiseWrap::kIsChainedPromiseField,
211-
parent_wrap != nullptr ?
212-
v8::True(env->isolate()) :
213-
v8::False(env->isolate()));
207+
Local<Object> obj;
208+
if (!env->promise_wrap_template()->NewInstance(env->context()).ToLocal(&obj))
209+
return nullptr;
210+
obj->SetInternalField(PromiseWrap::kPromiseField, promise);
211+
obj->SetInternalField(PromiseWrap::kIsChainedPromiseField,
212+
parent_wrap != nullptr ? v8::True(env->isolate())
213+
: v8::False(env->isolate()));
214214
CHECK_EQ(promise->GetAlignedPointerFromInternalField(0), nullptr);
215-
promise->SetInternalField(0, object);
216-
return new PromiseWrap(env, object, silent);
215+
promise->SetInternalField(0, obj);
216+
return new PromiseWrap(env, obj, silent);
217217
}
218218

219219
void PromiseWrap::GetPromise(Local<String> property,
@@ -251,6 +251,7 @@ static void PromiseHook(PromiseHookType type, Local<Promise> promise,
251251
PromiseWrap* parent_wrap = extractPromiseWrap(parent_promise);
252252
if (parent_wrap == nullptr) {
253253
parent_wrap = PromiseWrap::New(env, parent_promise, nullptr, true);
254+
if (parent_wrap == nullptr) return;
254255
}
255256

256257
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent_wrap);
@@ -260,7 +261,8 @@ static void PromiseHook(PromiseHookType type, Local<Promise> promise,
260261
}
261262
}
262263

263-
CHECK_NOT_NULL(wrap);
264+
if (wrap == nullptr) return;
265+
264266
if (type == PromiseHookType::kBefore) {
265267
env->async_hooks()->push_async_ids(
266268
wrap->get_async_id(), wrap->get_trigger_async_id());

0 commit comments

Comments
 (0)