diff options
author | Anna Henningsen <anna@addaleax.net> | 2017-11-29 20:55:43 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-12-05 23:49:36 +0100 |
commit | b73e66e94918aa89643b982cd3164100d02ec997 (patch) | |
tree | e23a4188d6330d7ea7bd34e9c04689c6f032cc5c /test/abort/test-abort-uncaught-exception.js | |
parent | aeddc3676bc9afe940106d34f30523f27b4cb44f (diff) | |
download | android-node-v8-b73e66e94918aa89643b982cd3164100d02ec997.tar.gz android-node-v8-b73e66e94918aa89643b982cd3164100d02ec997.tar.bz2 android-node-v8-b73e66e94918aa89643b982cd3164100d02ec997.zip |
vm: never abort on caught syntax error
Keep track of C++ `TryCatch` state to avoid aborting when
an exception is thrown inside one, and re-throw in JS
to make sure the exception is being picked up a second time by
a second uncaught exception handler, if necessary.
Add a bit of a hack to `AppendExceptionLine` to avoid overriding
the line responsible for re-throwing the exception.
PR-URL: https://github.com/nodejs/node/pull/17394
Fixes: https://github.com/nodejs/node/issues/13258
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/abort/test-abort-uncaught-exception.js')
-rw-r--r-- | test/abort/test-abort-uncaught-exception.js | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/test/abort/test-abort-uncaught-exception.js b/test/abort/test-abort-uncaught-exception.js index 4acddf349c..718f456c97 100644 --- a/test/abort/test-abort-uncaught-exception.js +++ b/test/abort/test-abort-uncaught-exception.js @@ -3,17 +3,24 @@ const common = require('../common'); const assert = require('assert'); const spawn = require('child_process').spawn; +const vm = require('vm'); const node = process.execPath; if (process.argv[2] === 'child') { throw new Error('child error'); +} else if (process.argv[2] === 'vm') { + // Refs: https://github.com/nodejs/node/issues/13258 + // This *should* still crash. + new vm.Script('[', {}); } else { - run('', null); - run('--abort-on-uncaught-exception', ['SIGABRT', 'SIGTRAP', 'SIGILL']); + run('', 'child', null); + run('--abort-on-uncaught-exception', 'child', + ['SIGABRT', 'SIGTRAP', 'SIGILL']); + run('--abort-on-uncaught-exception', 'vm', ['SIGABRT', 'SIGTRAP', 'SIGILL']); } -function run(flags, signals) { - const args = [__filename, 'child']; +function run(flags, argv2, signals) { + const args = [__filename, argv2]; if (flags) args.unshift(flags); |