summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-04-19 17:18:07 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2018-04-22 18:13:31 +0800
commit3eeb346aa96790765234f8e4759dd5896754067f (patch)
tree720c65a89a40677e234f20c72857dc9109ccd509
parentf31fc9398d1da30aa219968caaac5bd4ca56e6f2 (diff)
downloadandroid-node-v8-3eeb346aa96790765234f8e4759dd5896754067f.tar.gz
android-node-v8-3eeb346aa96790765234f8e4759dd5896754067f.tar.bz2
android-node-v8-3eeb346aa96790765234f8e4759dd5896754067f.zip
src: CancelTerminateExecution before throwing errors
Terminating the execution of a script would create a pending exception, therefore we should cancel the termination *before* throwing a new exception, otherwise the attempt to create a custom error may fail. PR-URL: https://github.com/nodejs/node/pull/20146 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--src/module_wrap.cc3
-rw-r--r--src/node_contextify.cc3
2 files changed, 4 insertions, 2 deletions
diff --git a/src/module_wrap.cc b/src/module_wrap.cc
index 48af2daa13..9bcdb4dce7 100644
--- a/src/module_wrap.cc
+++ b/src/module_wrap.cc
@@ -279,7 +279,9 @@ void ModuleWrap::Evaluate(const FunctionCallbackInfo<Value>& args) {
result = module->Evaluate(context);
}
+ // Convert the termination exception into a regular exception.
if (timed_out || received_signal) {
+ env->isolate()->CancelTerminateExecution();
// It is possible that execution was terminated by another timeout in
// which this timeout is nested, so check whether one of the watchdogs
// from this invocation is responsible for termination.
@@ -288,7 +290,6 @@ void ModuleWrap::Evaluate(const FunctionCallbackInfo<Value>& args) {
} else if (received_signal) {
env->ThrowError("Script execution interrupted.");
}
- env->isolate()->CancelTerminateExecution();
}
if (try_catch.HasCaught()) {
diff --git a/src/node_contextify.cc b/src/node_contextify.cc
index 68251004d5..e07d5ebcd2 100644
--- a/src/node_contextify.cc
+++ b/src/node_contextify.cc
@@ -851,7 +851,9 @@ class ContextifyScript : public BaseObject {
result = script->Run(env->context());
}
+ // Convert the termination exception into a regular exception.
if (timed_out || received_signal) {
+ env->isolate()->CancelTerminateExecution();
// It is possible that execution was terminated by another timeout in
// which this timeout is nested, so check whether one of the watchdogs
// from this invocation is responsible for termination.
@@ -860,7 +862,6 @@ class ContextifyScript : public BaseObject {
} else if (received_signal) {
env->ThrowError("Script execution interrupted.");
}
- env->isolate()->CancelTerminateExecution();
}
if (try_catch.HasCaught()) {