Browse Source

util: avoid out-of-bounds arguments index access

This updates util.inspect() to avoid accessing out-of-range indices of
the `arguments` object, which is known to cause optimization bailout.

Based on an average of 10 runs of the benchmark in
`benchmark/util/inspect.js`, this change improves the performance of
`util.inspect` by about 10%.

Relates to https://github.com/nodejs/node/issues/10323

PR-URL: https://github.com/nodejs/node/pull/10569
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: Jackson Tian <shyvo1987@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
v7.x
Teddy Katz 8 years ago
committed by Italo A. Casas
parent
commit
d628f3a227
  1. 8
      lib/util.js

8
lib/util.js

@ -173,8 +173,12 @@ function inspect(obj, opts) {
stylize: stylizeNoColor
};
// legacy...
if (arguments[2] !== undefined) ctx.depth = arguments[2];
if (arguments[3] !== undefined) ctx.colors = arguments[3];
if (arguments.length >= 3 && arguments[2] !== undefined) {
ctx.depth = arguments[2];
}
if (arguments.length >= 4 && arguments[3] !== undefined) {
ctx.colors = arguments[3];
}
if (typeof opts === 'boolean') {
// legacy...
ctx.showHidden = opts;

Loading…
Cancel
Save