Skip to content

Commit

Permalink
errors,process: fix error message of hrtime()
Browse files Browse the repository at this point in the history
process.hrtime() incorrectly passed the function name to
errors.TypeError instead of the name of the argument.
Additionally, the type of the actual argument was added to the error
message and a new error code ERR_INVALID_ARRAY_LENGTH was added.

PR-URL: #13739
Reviewed-By: Timothy Gu <[email protected]>
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
  • Loading branch information
tniessen committed Jun 20, 2017
1 parent d291338 commit a0f7284
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 17 deletions.
9 changes: 9 additions & 0 deletions lib/internal/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,15 @@ E('ERR_HTTP_INVALID_CHAR', 'Invalid character in statusMessage.');
E('ERR_HTTP_INVALID_STATUS_CODE',
(originalStatusCode) => `Invalid status code: ${originalStatusCode}`);
E('ERR_INDEX_OUT_OF_RANGE', 'Index out of range');
E('ERR_INVALID_ARRAY_LENGTH',
(name, length, actual) => {
let msg = `The "${name}" array must have a length of ${length}`;
if (arguments.length > 2) {
const len = Array.isArray(actual) ? actual.length : actual;
msg += `. Received length ${len}`;
}
return msg;
});
E('ERR_INVALID_ARG_TYPE', invalidArgType);
E('ERR_INVALID_CALLBACK', 'callback must be a function');
E('ERR_INVALID_FD', (fd) => `"fd" must be a positive integer: ${fd}`);
Expand Down
19 changes: 12 additions & 7 deletions lib/internal/process.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,19 @@ function setup_hrtime() {
_hrtime(hrValues);

if (time !== undefined) {
if (Array.isArray(time) && time.length === 2) {
const sec = (hrValues[0] * 0x100000000 + hrValues[1]) - time[0];
const nsec = hrValues[2] - time[1];
const needsBorrow = nsec < 0;
return [needsBorrow ? sec - 1 : sec, needsBorrow ? nsec + 1e9 : nsec];
if (!Array.isArray(time)) {
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'time', 'Array',
time);
}
throw new errors.TypeError('ERR_INVALID_ARG_TYPE',
'process.hrtime()', 'Array');
if (time.length !== 2) {
throw new errors.TypeError('ERR_INVALID_ARRAY_LENGTH', 'time', 2,
time);
}

const sec = (hrValues[0] * 0x100000000 + hrValues[1]) - time[0];
const nsec = hrValues[2] - time[1];
const needsBorrow = nsec < 0;
return [needsBorrow ? sec - 1 : sec, needsBorrow ? nsec + 1e9 : nsec];
}

return [
Expand Down
30 changes: 20 additions & 10 deletions test/parallel/test-process-hrtime.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,25 +32,35 @@ validateTuple(tuple);
// validate that passing an existing tuple returns another valid tuple
validateTuple(process.hrtime(tuple));

const invalidHrtimeArgument = common.expectsError({
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
message: 'The "process.hrtime()" argument must be of type Array'
});

// test that only an Array may be passed to process.hrtime()
assert.throws(() => {
process.hrtime(1);
}, invalidHrtimeArgument);
}, common.expectsError({
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
message: 'The "time" argument must be of type Array. Received type number'
}));
assert.throws(() => {
process.hrtime([]);
}, invalidHrtimeArgument);
}, common.expectsError({
code: 'ERR_INVALID_ARRAY_LENGTH',
type: TypeError,
message: 'The "time" array must have a length of 2. Received length 0'
}));
assert.throws(() => {
process.hrtime([1]);
}, invalidHrtimeArgument);
}, common.expectsError({
code: 'ERR_INVALID_ARRAY_LENGTH',
type: TypeError,
message: 'The "time" array must have a length of 2. Received length 1'
}));
assert.throws(() => {
process.hrtime([1, 2, 3]);
}, invalidHrtimeArgument);
}, common.expectsError({
code: 'ERR_INVALID_ARRAY_LENGTH',
type: TypeError,
message: 'The "time" array must have a length of 2. Received length 3'
}));

function validateTuple(tuple) {
assert(Array.isArray(tuple));
Expand Down

0 comments on commit a0f7284

Please sign in to comment.