From 0573c0fb23103fcd8c8305c6883ca576a81e0f1b Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Sat, 16 Dec 2017 01:25:17 -0200 Subject: [PATCH] console: make error handling engine agnostic 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: https://github.com/nodejs/node/pull/17707 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- lib/console.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/console.js b/lib/console.js index 8be06935de4839..8480ccfd468c47 100644 --- a/lib/console.js +++ b/lib/console.js @@ -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); @@ -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 {