diff --git a/lib/internal/util.js b/lib/internal/util.js index 226a57ddda55b3..a574974682b0b3 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -35,6 +35,7 @@ const { SafeSet, SafeWeakMap, SafeWeakRef, + StringPrototypeIncludes, StringPrototypeReplace, StringPrototypeToLowerCase, StringPrototypeToUpperCase, @@ -476,7 +477,7 @@ function spliceOne(list, index) { list.pop(); } -const kNodeModulesRE = /^(.*)[\\/]node_modules[\\/]/; +const kNodeModulesRE = /^(?:.*)[\\/]node_modules[\\/]/; let getStructuredStack; @@ -488,13 +489,13 @@ function isInsideNodeModules() { // side-effect-free. Since this is currently only used for a deprecated API, // the perf implications should be okay. getStructuredStack = runInNewContext(`(function() { - try { Error.stackTraceLimit = Infinity; } catch {} - return function structuredStack() { - const e = new Error(); - overrideStackTrace.set(e, (err, trace) => trace); - return e.stack; - }; - })()`, { overrideStackTrace }, { filename: 'structured-stack' }); + try { Error.stackTraceLimit = Infinity; } catch {} + return function structuredStack() { + const e = new Error(); + overrideStackTrace.set(e, (err, trace) => trace); + return e.stack; + }; + })()`, { overrideStackTrace }, { filename: 'structured-stack' }); } const stack = getStructuredStack(); @@ -506,8 +507,10 @@ function isInsideNodeModules() { const filename = frame.getFileName(); // If a filename does not start with / or contain \, // it's likely from Node.js core. - if (RegExpPrototypeExec(/^\/|\\/, filename) === null) + if ( + filename[0] !== '/' || !StringPrototypeIncludes(filename, '\\')) { continue; + } return RegExpPrototypeExec(kNodeModulesRE, filename) !== null; } }