From ca7adcafda9151733827a47b845fdbe32f91ca19 Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Sat, 29 Dec 2018 16:30:19 +0800 Subject: [PATCH] fs: extract start and end check into checkPosition PR-URL: https://github.com/nodejs/node/pull/25264 Reviewed-By: Weijia Wang Reviewed-By: Luigi Pinca --- lib/internal/fs/streams.js | 43 +++++++++++++------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/lib/internal/fs/streams.js b/lib/internal/fs/streams.js index c311fb59c825da..224752b1011c24 100644 --- a/lib/internal/fs/streams.js +++ b/lib/internal/fs/streams.js @@ -37,6 +37,19 @@ function allocNewPool(poolSize) { pool.used = 0; } +// Check the `this.start` and `this.end` of stream. +function checkPosition(pos, name) { + if (!Number.isSafeInteger(pos)) { + validateNumber(pos, name); + if (!Number.isInteger(pos)) + throw new ERR_OUT_OF_RANGE(name, 'an integer', pos); + throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos); + } + if (pos < 0) { + throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos); + } +} + function ReadStream(path, options) { if (!(this instanceof ReadStream)) return new ReadStream(path, options); @@ -65,23 +78,7 @@ function ReadStream(path, options) { this.closed = false; if (this.start !== undefined) { - if (!Number.isSafeInteger(this.start)) { - validateNumber(this.start, 'start'); - if (!Number.isInteger(this.start)) - throw new ERR_OUT_OF_RANGE('start', 'an integer', this.start); - throw new ERR_OUT_OF_RANGE( - 'start', - '>= 0 and <= 2 ** 53 - 1', - this.start - ); - } - if (this.start < 0) { - throw new ERR_OUT_OF_RANGE( - 'start', - '>= 0 and <= 2 ** 53 - 1', - this.start - ); - } + checkPosition(this.start, 'start'); this.pos = this.start; } @@ -89,17 +86,7 @@ function ReadStream(path, options) { if (this.end === undefined) { this.end = Infinity; } else if (this.end !== Infinity) { - if (!Number.isSafeInteger(this.end)) { - if (typeof this.end !== 'number') - throw new ERR_INVALID_ARG_TYPE('end', 'number', this.end); - if (!Number.isInteger(this.end)) - throw new ERR_OUT_OF_RANGE('end', 'an integer', this.end); - throw new ERR_OUT_OF_RANGE('end', '>= 0 and <= 2 ** 53 - 1', this.end); - } - - if (this.end < 0) { - throw new ERR_OUT_OF_RANGE('end', '>= 0 and <= 2 ** 53 - 1', this.end); - } + checkPosition(this.end, 'end'); if (this.start !== undefined && this.start > this.end) { throw new ERR_OUT_OF_RANGE(