Skip to content

Commit

Permalink
buffer: inspect extra properties
Browse files Browse the repository at this point in the history
This makes sure extra properties on buffers are not ignored anymore
when inspecting the buffer.

PR-URL: nodejs#25150
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
BridgeAR committed Jan 16, 2019
1 parent 318e810 commit 8f8c6ba
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
24 changes: 23 additions & 1 deletion lib/buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ const {
kStringMaxLength
} = internalBinding('buffer');
const { isAnyArrayBuffer } = internalBinding('types');
const {
getOwnNonIndexProperties,
propertyFilter: {
ALL_PROPERTIES,
ONLY_ENUMERABLE
}
} = internalBinding('util');
const {
customInspectSymbol,
isInsideNodeModules,
Expand All @@ -51,6 +58,11 @@ const {
const {
pendingDeprecation
} = internalBinding('config');
const {
formatProperty,
kObjectType
} = require('internal/util/inspect');

const {
ERR_BUFFER_OUT_OF_BOUNDS,
ERR_OUT_OF_RANGE,
Expand Down Expand Up @@ -670,10 +682,20 @@ Buffer.prototype.equals = function equals(otherBuffer) {
Buffer.prototype[customInspectSymbol] = function inspect(recurseTimes, ctx) {
const max = exports.INSPECT_MAX_BYTES;
const actualMax = Math.min(max, this.length);
let str = this.hexSlice(0, actualMax).replace(/(.{2})/g, '$1 ').trim();
const remaining = this.length - max;
let str = this.hexSlice(0, actualMax).replace(/(.{2})/g, '$1 ').trim();
if (remaining > 0)
str += ` ... ${remaining} more byte${remaining > 1 ? 's' : ''}`;
// Inspect special properties as well, if possible.
if (ctx) {
const filter = ctx.showHidden ? ALL_PROPERTIES : ONLY_ENUMERABLE;
str += getOwnNonIndexProperties(this, filter).reduce((str, key) => {
// Using `formatProperty()` expects an indentationLvl to be set.
ctx.indentationLvl = 0;
str += `, ${formatProperty(ctx, this, recurseTimes, key, kObjectType)}`;
return str;
}, '');
}
return `<${this.constructor.name} ${str}>`;
};
Buffer.prototype.inspect = Buffer.prototype[customInspectSymbol];
Expand Down
4 changes: 3 additions & 1 deletion lib/internal/util/inspect.js
Original file line number Diff line number Diff line change
Expand Up @@ -1220,5 +1220,7 @@ function reduceToSingleString(ctx, output, base, braces) {
}

module.exports = {
inspect
inspect,
formatProperty,
kObjectType
};
2 changes: 1 addition & 1 deletion test/parallel/test-buffer-inspect.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ assert.strictEqual(util.inspect(b), expected);
assert.strictEqual(util.inspect(s), expected);

b.inspect = undefined;
assert.strictEqual(util.inspect(b), expected);
assert.strictEqual(util.inspect(b), '<Buffer 31 32, inspect: undefined>');

0 comments on commit 8f8c6ba

Please sign in to comment.