From e05f49c58bb72f66fb5d2e63adea2210975b6335 Mon Sep 17 00:00:00 2001 From: AdityaSrivast Date: Tue, 12 Jun 2018 01:20:41 +0530 Subject: [PATCH] lib: add case of no argument to ERR_INVALID_ARG_VALUE in errors.js ERR_INVALID_ARG_VALUE is an error for wrong arguments given to the function. But calling a function without argument should also generate a sensible error message. For no argument case, parameter 'value' should be passed with zero value and the error message is generated. In readSync(fd, buffer, offset, length, position), triggers validateOffsetLengthRead() in lib/internal/fs/utils.js for validation. When buffer is empty, a weird message is generated "The value of offset is out of range.It must be >= 0 && <= 0. Received 0". There should be a special case when buffer is empty or bufferLength is zero, which should trigger ERR_INVALID_ARG_VALUE error. Fixes: #21193 --- lib/internal/errors.js | 2 +- lib/internal/fs/utils.js | 14 +++++++++----- test/parallel/test-internal-errors.js | 28 +++++++++------------------ 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 718009cb2ade22..7656b6a1fa7181 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -638,7 +638,7 @@ E('ERR_INVALID_ARG_VALUE', (name, value, reason = 'is invalid') => { if (inspected.length > 128) { inspected = `${inspected.slice(0, 128)}...`; } else if (inspected === '0') { - inspected = 'No value.'; + inspected = 'no value.'; } return `The argument '${name}' ${reason}. Received ${inspected}`; }, TypeError, RangeError); diff --git a/lib/internal/fs/utils.js b/lib/internal/fs/utils.js index 7598c530161c74..3486b96735e974 100644 --- a/lib/internal/fs/utils.js +++ b/lib/internal/fs/utils.js @@ -291,11 +291,15 @@ function validateBuffer(buffer) { function validateOffsetLengthRead(offset, length, bufferLength) { let err; - if (bufferLength === 0) { - err = new ERR_INVALID_ARG_VALUE('buffer', 0, - "is empty and can't be written."); - } else if (offset < 0 || offset >= bufferLength) { - err = new ERR_OUT_OF_RANGE('offset', `>= 0 && <= ${bufferLength}`, offset); + + if (offset < 0 || offset >= bufferLength) { + if (bufferLength === 0) { + throw ERR_INVALID_ARG_VALUE('buffer', 0, + 'is empty and can\'t be written'); + } else { + err = new ERR_OUT_OF_RANGE('offset', + `>= 0 && <= ${bufferLength}`, offset); + } } else if (length < 0 || offset + length > bufferLength) { err = new ERR_OUT_OF_RANGE('length', `>= 0 && <= ${bufferLength - offset}`, length); diff --git a/test/parallel/test-internal-errors.js b/test/parallel/test-internal-errors.js index d8849b3d2165c5..b5e08911b8219e 100644 --- a/test/parallel/test-internal-errors.js +++ b/test/parallel/test-internal-errors.js @@ -41,25 +41,15 @@ errors.E('TEST_ERROR_2', (a, b) => `${a} ${b}`, Error); assert.strictEqual(err.code, 'TEST_ERROR_2'); } -// { -// assert.throws(() => new errors.codes.TEST_ERROR_1(){ -// message: 'Code: TEST_ERROR_1; The provided arguments ' + -// 'length (0) does not match the required ones (1).' -// } -// ); -// } - -assert.expectsError(() => { - const fs = require('fs'); - const file = '/home/aditya/node/test/nodetest/testcodes'; - const keyfile = fs.openSync(file, 'r'); - const string = new Uint8Array(); - const num = fs.readSync(keyfile, string, 0, 10, 0); - console.log(num); -}, { code: 'ERR_OUT_OF_RANGE', - type: RangeError, - message: 'Just Testing' -}); +{ + assert.throws( + () => new errors.codes.TEST_ERROR_1(), + { + message: 'Code: TEST_ERROR_1; The provided arguments ' + + 'length (0) does not match the required ones (1).' + } + ); +} // Tests for common.expectsError common.expectsError(() => {