Skip to content

Commit

Permalink
lib: instantiate console methods eagerly
Browse files Browse the repository at this point in the history
Before this commit they were instantiated lazily but that fails when the
first call is under stack overflow conditions.

PR-URL: nodejs#14791
Fixes: https://github.com/nodejs/help#778
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Timothy Gu <[email protected]>
Reviewed-By: Refael Ackermann <[email protected]>
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
bnoordhuis authored and jasnell committed Aug 23, 2017
1 parent 779a480 commit da1af3d
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
19 changes: 18 additions & 1 deletion lib/internal/bootstrap_node.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
setupProcessICUVersions();

setupGlobalVariables();
if (!process._noBrowserGlobals) {
const browserGlobals = !process._noBrowserGlobals;
if (browserGlobals) {
setupGlobalTimeouts();
setupGlobalConsole();
}
Expand All @@ -40,6 +41,22 @@
NativeModule.require('internal/process/warning').setup();
NativeModule.require('internal/process/next_tick').setup();
NativeModule.require('internal/process/stdio').setup();
if (browserGlobals) {
// Instantiate eagerly in case the first call is under stack overflow
// conditions where instantiation doesn't work.
const console = global.console;
console.assert;
console.clear;
console.count;
console.countReset;
console.dir;
console.error;
console.log;
console.time;
console.timeEnd;
console.trace;
console.warn;
}
_process.setupKillAndExit();
_process.setupSignalHandlers();
if (global.__coverage__)
Expand Down
18 changes: 18 additions & 0 deletions test/message/stack_overflow_async.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Flags: --stack_trace_limit=3

'use strict';
require('../common');

async function f() {
await f();
}

async function g() {
try {
await f();
} catch (e) {
console.log(e);
}
}

g();
4 changes: 4 additions & 0 deletions test/message/stack_overflow_async.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
RangeError: Maximum call stack size exceeded
at f (*test*message*stack_overflow_async.js:*)
at f (*test*message*stack_overflow_async.js:7:*)
at f (*test*message*stack_overflow_async.js:7:*)

0 comments on commit da1af3d

Please sign in to comment.