mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
vm: fix displayErrors in runIn.. functions
This option has been broken for almost a year when used with any of the vm.runIn.. family of functions, except for syntax errors. PR-URL: https://github.com/nodejs/node/pull/13074 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
committed by
James M Snell
parent
4cbdac3183
commit
191bb5a358
@@ -231,7 +231,7 @@ function REPLServer(prompt,
|
||||
try {
|
||||
try {
|
||||
const scriptOptions = {
|
||||
displayErrors: true,
|
||||
displayErrors: false,
|
||||
breakOnSigint: self.breakEvalOnSigint
|
||||
};
|
||||
|
||||
|
||||
@@ -736,8 +736,10 @@ class ContextifyScript : public BaseObject {
|
||||
return;
|
||||
}
|
||||
|
||||
Local<String> decorated_stack = String::Concat(arrow.As<String>(),
|
||||
stack.As<String>());
|
||||
Local<String> decorated_stack = String::Concat(
|
||||
String::Concat(arrow.As<String>(),
|
||||
FIXED_ONE_BYTE_STRING(env->isolate(), "\n")),
|
||||
stack.As<String>());
|
||||
err_obj->Set(env->stack_string(), decorated_stack);
|
||||
err_obj->SetPrivate(
|
||||
env->context(),
|
||||
@@ -984,6 +986,9 @@ class ContextifyScript : public BaseObject {
|
||||
env->ThrowError("Script execution timed out.");
|
||||
} else if (received_signal) {
|
||||
env->ThrowError("Script execution interrupted.");
|
||||
} else if (display_errors) {
|
||||
// We should decorate non-termination exceptions
|
||||
DecorateErrorStack(env, *try_catch);
|
||||
}
|
||||
|
||||
// If there was an exception thrown during script execution, re-throw it.
|
||||
@@ -996,15 +1001,6 @@ class ContextifyScript : public BaseObject {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (result.IsEmpty()) {
|
||||
// Error occurred during execution of the script.
|
||||
if (display_errors) {
|
||||
DecorateErrorStack(env, *try_catch);
|
||||
}
|
||||
try_catch->ReThrow();
|
||||
return false;
|
||||
}
|
||||
|
||||
args.GetReturnValue().Set(result);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,12 @@ const vm = require('vm');
|
||||
|
||||
console.error('beginning');
|
||||
|
||||
vm.runInThisContext('throw new Error("boo!")', { filename: 'test.vm' });
|
||||
try {
|
||||
vm.runInThisContext('throw new Error("boo!")', { filename: 'test.vm'});
|
||||
} catch (err) {
|
||||
console.error(err.stack);
|
||||
}
|
||||
|
||||
vm.runInThisContext('throw new Error("spooky!")', { filename: 'test.vm' });
|
||||
|
||||
console.error('end');
|
||||
|
||||
@@ -14,3 +14,18 @@ Error: boo!
|
||||
at tryModuleLoad (module.js:*:*)
|
||||
at Function.Module._load (module.js:*)
|
||||
at Function.Module.runMain (module.js:*)
|
||||
test.vm:1
|
||||
throw new Error("spooky!")
|
||||
^
|
||||
|
||||
Error: spooky!
|
||||
at test.vm:1:7
|
||||
at ContextifyScript.Script.runInThisContext (vm.js:*)
|
||||
at Object.runInThisContext (vm.js:*)
|
||||
at Object.<anonymous> (*test*message*vm_display_runtime_error.js:*)
|
||||
at Module._compile (module.js:*)
|
||||
at Object.Module._extensions..js (module.js:*)
|
||||
at Module.load (module.js:*)
|
||||
at tryModuleLoad (module.js:*:*)
|
||||
at Function.Module._load (module.js:*)
|
||||
at Function.Module.runMain (module.js:*)
|
||||
|
||||
Reference in New Issue
Block a user