lib: make isStackOverflowError() engine-agnostic
Assumption that stack overflow exception has name == "RangeError" is v8-specific. Updated logic to dynamically capture error name when capturing error message. PR-URL: https://github.com/nodejs/node/pull/19705 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
4d749e1052
commit
cd5f353405
@ -572,25 +572,29 @@ function dnsException(err, syscall, hostname) {
|
||||
return ex;
|
||||
}
|
||||
|
||||
let MAX_STACK_MESSAGE;
|
||||
let maxStack_ErrorName;
|
||||
let maxStack_ErrorMessage;
|
||||
/**
|
||||
* Returns true if `err` is a `RangeError` with an engine-specific message.
|
||||
* Returns true if `err.name` and `err.message` are equal to engine-specific
|
||||
* values indicating max call stack size has been exceeded.
|
||||
* "Maximum call stack size exceeded" in V8.
|
||||
*
|
||||
* @param {Error} err
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isStackOverflowError(err) {
|
||||
if (MAX_STACK_MESSAGE === undefined) {
|
||||
if (maxStack_ErrorMessage === undefined) {
|
||||
try {
|
||||
function overflowStack() { overflowStack(); }
|
||||
overflowStack();
|
||||
} catch (err) {
|
||||
MAX_STACK_MESSAGE = err.message;
|
||||
maxStack_ErrorMessage = err.message;
|
||||
maxStack_ErrorName = err.name;
|
||||
}
|
||||
}
|
||||
|
||||
return err.name === 'RangeError' && err.message === MAX_STACK_MESSAGE;
|
||||
return err.name === maxStack_ErrorName &&
|
||||
err.message === maxStack_ErrorMessage;
|
||||
}
|
||||
|
||||
module.exports = exports = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user