Skip to content

Commit

Permalink
console: make error handling engine agnostic
Browse files Browse the repository at this point in the history
Calling write could throw a maximum call stack size error. To make
sure this is not specific to a single engine (version), lazily
populate the correct error message by producing such a error on
demand.

PR-URL: #17707
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
BridgeAR authored and MylesBorins committed Jan 8, 2018
1 parent 3f60960 commit b5e98de
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion lib/console.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ const kCounts = Symbol('counts');
// Track amount of indentation required via `console.group()`.
const kGroupIndent = Symbol('groupIndent');

let MAX_STACK_MESSAGE;

function Console(stdout, stderr, ignoreErrors = true) {
if (!(this instanceof Console)) {
return new Console(stdout, stderr, ignoreErrors);
Expand Down Expand Up @@ -111,9 +113,17 @@ function write(ignoreErrors, stream, string, errorhandler, groupIndent) {

stream.write(string, errorhandler);
} catch (e) {
if (MAX_STACK_MESSAGE === undefined) {
try {
// eslint-disable-next-line no-unused-vars
function a() { a(); }
} catch (err) {
MAX_STACK_MESSAGE = err.message;
}
}
// console is a debugging utility, so it swallowing errors is not desirable
// even in edge cases such as low stack space.
if (e.message === 'Maximum call stack size exceeded')
if (e.message === MAX_STACK_MESSAGE && e.name === 'RangeError')
throw e;
// Sorry, there’s no proper way to pass along the error here.
} finally {
Expand Down

0 comments on commit b5e98de

Please sign in to comment.