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: #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 MylesBorins committed Sep 12, 2017
1 parent ae27cb8 commit f34e0f9
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 f34e0f9

Please sign in to comment.