From 4523d85ed718994b5033987fa3c220948c935096 Mon Sep 17 00:00:00 2001 From: buji Date: Tue, 10 Apr 2018 15:31:35 +0800 Subject: [PATCH 1/4] fs: complete error message for validate function --- lib/internal/fs.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/internal/fs.js b/lib/internal/fs.js index 6ff4152aa46814..45e60b893fc714 100644 --- a/lib/internal/fs.js +++ b/lib/internal/fs.js @@ -350,11 +350,14 @@ function validateLen(len) { let err; if (!isInt32(len)) { - if (typeof value !== 'number') { + if (typeof len !== 'number') { err = new ERR_INVALID_ARG_TYPE('len', 'number', len); - } else { + } else if (!Number.isInteger(len)) { // TODO(BridgeAR): Improve this error message. err = new ERR_OUT_OF_RANGE('len', 'an integer', len); + } else { + // 2 ** 31 === 2147483648 + err = new ERR_OUT_OF_RANGE('len', '>= -2147483648 && < 2147483648', len); } } From 0ba1b3760259c4e8c3377502d5cf7ff3dbb4c28d Mon Sep 17 00:00:00 2001 From: buji Date: Tue, 10 Apr 2018 16:21:34 +0800 Subject: [PATCH 2/4] test: add test case for fs.ftruncate --- lib/internal/fs.js | 2 +- test/parallel/test-fs-truncate.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/internal/fs.js b/lib/internal/fs.js index 45e60b893fc714..0878959f4669b6 100644 --- a/lib/internal/fs.js +++ b/lib/internal/fs.js @@ -357,7 +357,7 @@ function validateLen(len) { err = new ERR_OUT_OF_RANGE('len', 'an integer', len); } else { // 2 ** 31 === 2147483648 - err = new ERR_OUT_OF_RANGE('len', '>= -2147483648 && < 2147483648', len); + err = new ERR_OUT_OF_RANGE('len', '> -2147483649 && < 2147483648', len); } } diff --git a/test/parallel/test-fs-truncate.js b/test/parallel/test-fs-truncate.js index 62da52b38e1dc3..bc0560207b0cea 100644 --- a/test/parallel/test-fs-truncate.js +++ b/test/parallel/test-fs-truncate.js @@ -190,6 +190,19 @@ function testFtruncate(cb) { ); }); + // 2 ** 31 = 2147483648 + [2147483648, -2147483649].forEach((input) => { + assert.throws( + () => fs.ftruncate(fd, input), + { + code: 'ERR_OUT_OF_RANGE', + name: 'RangeError [ERR_OUT_OF_RANGE]', + message: 'The value of "len" is out of range. It must be ' + + `> -2147483649 && < 2147483648. Received ${input}` + } + ); + }); + fs.ftruncate(fd, undefined, common.mustCall(function(err) { assert.ifError(err); assert(fs.readFileSync(file5).equals(Buffer.from(''))); From cf1f9b2b572773e38946fc5cba9ab0916ecbf29b Mon Sep 17 00:00:00 2001 From: buji Date: Wed, 11 Apr 2018 09:30:04 +0800 Subject: [PATCH 3/4] test: add a test for floating point numbers --- lib/internal/fs.js | 1 - test/parallel/test-fs-truncate.js | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/internal/fs.js b/lib/internal/fs.js index 0878959f4669b6..aacb059d8dc361 100644 --- a/lib/internal/fs.js +++ b/lib/internal/fs.js @@ -353,7 +353,6 @@ function validateLen(len) { if (typeof len !== 'number') { err = new ERR_INVALID_ARG_TYPE('len', 'number', len); } else if (!Number.isInteger(len)) { - // TODO(BridgeAR): Improve this error message. err = new ERR_OUT_OF_RANGE('len', 'an integer', len); } else { // 2 ** 31 === 2147483648 diff --git a/test/parallel/test-fs-truncate.js b/test/parallel/test-fs-truncate.js index bc0560207b0cea..2f8839583202d0 100644 --- a/test/parallel/test-fs-truncate.js +++ b/test/parallel/test-fs-truncate.js @@ -190,6 +190,18 @@ function testFtruncate(cb) { ); }); + [-1.5, 1.5].forEach((input) => { + assert.throws( + () => fs.ftruncate(fd, input), + { + code: 'ERR_OUT_OF_RANGE', + name: 'RangeError [ERR_OUT_OF_RANGE]', + message: 'The value of "len" is out of range. It must be ' + + `an integer. Received ${input}` + } + ); + }); + // 2 ** 31 = 2147483648 [2147483648, -2147483649].forEach((input) => { assert.throws( From 55b458d418c4801c93257f7eed6b1d21fdea5df2 Mon Sep 17 00:00:00 2001 From: buji Date: Wed, 11 Apr 2018 15:23:12 +0800 Subject: [PATCH 4/4] test: use common.expectsError instead of assert.throws --- test/parallel/test-fs-truncate.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-fs-truncate.js b/test/parallel/test-fs-truncate.js index 2f8839583202d0..74ab37655ba585 100644 --- a/test/parallel/test-fs-truncate.js +++ b/test/parallel/test-fs-truncate.js @@ -179,7 +179,7 @@ function testFtruncate(cb) { process.on('exit', () => fs.closeSync(fd)); ['', false, null, {}, []].forEach((input) => { - assert.throws( + common.expectsError( () => fs.ftruncate(fd, input), { code: 'ERR_INVALID_ARG_TYPE', @@ -191,7 +191,7 @@ function testFtruncate(cb) { }); [-1.5, 1.5].forEach((input) => { - assert.throws( + common.expectsError( () => fs.ftruncate(fd, input), { code: 'ERR_OUT_OF_RANGE', @@ -204,7 +204,7 @@ function testFtruncate(cb) { // 2 ** 31 = 2147483648 [2147483648, -2147483649].forEach((input) => { - assert.throws( + common.expectsError( () => fs.ftruncate(fd, input), { code: 'ERR_OUT_OF_RANGE', @@ -234,7 +234,7 @@ function testFtruncate(cb) { ['', false, null, undefined, {}, []].forEach((input) => { ['ftruncate', 'ftruncateSync'].forEach((fnName) => { - assert.throws( + common.expectsError( () => fs[fnName](input), { code: 'ERR_INVALID_ARG_TYPE',