diff --git a/common.gypi b/common.gypi index c7a26fb673997b..c00b283306c291 100644 --- a/common.gypi +++ b/common.gypi @@ -36,7 +36,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.81', + 'v8_embedder_string': '-node.82', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/objects/contexts.cc b/deps/v8/src/objects/contexts.cc index e7c3ed12e0e049..8af37cd12298f9 100644 --- a/deps/v8/src/objects/contexts.cc +++ b/deps/v8/src/objects/contexts.cc @@ -545,7 +545,15 @@ void NativeContext::RunPromiseHook(PromiseHookType type, Handle receiver = isolate->global_proxy(); - if (Execution::Call(isolate, hook, receiver, argc, argv).is_null()) { + StackLimitCheck check(isolate); + bool failed = false; + if (check.HasOverflowed()) { + isolate->StackOverflow(); + failed = true; + } else { + failed = Execution::Call(isolate, hook, receiver, argc, argv).is_null(); + } + if (failed) { DCHECK(isolate->has_pending_exception()); Handle exception(isolate->pending_exception(), isolate); diff --git a/deps/v8/test/mjsunit/promise-hooks.js b/deps/v8/test/mjsunit/promise-hooks.js index f7c1558c1d2e20..c30a3f36da0b5c 100644 --- a/deps/v8/test/mjsunit/promise-hooks.js +++ b/deps/v8/test/mjsunit/promise-hooks.js @@ -273,3 +273,11 @@ exceptions(); d8.promise.setHooks(); })(); + +(function overflow(){ + d8.promise.setHooks(() => { new Promise(()=>{}) }); + // Trigger overflow from JS code: + Promise.all([Promise.resolve(1)]); + %PerformMicrotaskCheckpoint(); + d8.promise.setHooks(); +});