Browse Source
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>
v6
Marcel Laverdet
8 years ago
committed by
Anna Henningsen
No known key found for this signature in database
GPG Key ID: D8B9F5AEAE84E4CF
4 changed files with
30 additions and
13 deletions
lib/repl.js
src/node_contextify.cc
test/message/vm_display_runtime_error.js
test/message/vm_display_runtime_error.out
@ -231,7 +231,7 @@ function REPLServer(prompt,
try {
try {
const scriptOptions = {
displayErrors : tru e,
displayErrors : fals e,
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:*)