Skip to content

Commit ecdf6dd

Browse files
anonrigtargos
authored andcommitted
zlib: simplify validators
PR-URL: #54442 Reviewed-By: James M Snell <[email protected]>
1 parent d65a8f3 commit ecdf6dd

File tree

2 files changed

+46
-45
lines changed

2 files changed

+46
-45
lines changed

lib/internal/validators.js

+43
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const {
77
ArrayPrototypeIncludes,
88
ArrayPrototypeJoin,
99
ArrayPrototypeMap,
10+
NumberIsFinite,
1011
NumberIsInteger,
1112
NumberIsNaN,
1213
NumberMAX_SAFE_INTEGER,
@@ -567,6 +568,46 @@ const validateLinkHeaderValue = hideStackFrames((hints) => {
567568
);
568569
});
569570

571+
// 1. Returns false for undefined and NaN
572+
// 2. Returns true for finite numbers
573+
// 3. Throws ERR_INVALID_ARG_TYPE for non-numbers
574+
// 4. Throws ERR_OUT_OF_RANGE for infinite numbers
575+
const validateFiniteNumber = hideStackFrames((number, name) => {
576+
// Common case
577+
if (number === undefined) {
578+
return false;
579+
}
580+
581+
if (NumberIsFinite(number)) {
582+
return true; // Is a valid number
583+
}
584+
585+
if (NumberIsNaN(number)) {
586+
return false;
587+
}
588+
589+
validateNumber(number, name);
590+
591+
// Infinite numbers
592+
throw new ERR_OUT_OF_RANGE(name, 'a finite number', number);
593+
});
594+
595+
// 1. Returns def for number when it's undefined or NaN
596+
// 2. Returns number for finite numbers >= lower and <= upper
597+
// 3. Throws ERR_INVALID_ARG_TYPE for non-numbers
598+
// 4. Throws ERR_OUT_OF_RANGE for infinite numbers or numbers > upper or < lower
599+
const checkRangesOrGetDefault = hideStackFrames(
600+
(number, name, lower, upper, def) => {
601+
if (!validateFiniteNumber(number, name)) {
602+
return def;
603+
}
604+
if (number < lower || number > upper) {
605+
throw new ERR_OUT_OF_RANGE(name, `>= ${lower} and <= ${upper}`, number);
606+
}
607+
return number;
608+
},
609+
);
610+
570611
module.exports = {
571612
isInt32,
572613
isUint32,
@@ -601,4 +642,6 @@ module.exports = {
601642
validateAbortSignal,
602643
validateLinkHeaderValue,
603644
validateInternalField,
645+
validateFiniteNumber,
646+
checkRangesOrGetDefault,
604647
};

lib/zlib.js

+3-45
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ const {
2828
ArrayPrototypePush,
2929
FunctionPrototypeBind,
3030
MathMaxApply,
31-
NumberIsFinite,
3231
NumberIsNaN,
3332
ObjectDefineProperties,
3433
ObjectDefineProperty,
@@ -51,7 +50,6 @@ const {
5150
ERR_ZLIB_INITIALIZATION_FAILED,
5251
},
5352
genericNodeError,
54-
hideStackFrames,
5553
} = require('internal/errors');
5654
const { Transform, finished } = require('stream');
5755
const {
@@ -71,9 +69,10 @@ const {
7169
} = require('buffer');
7270
const { owner_symbol } = require('internal/async_hooks').symbols;
7371
const {
72+
checkRangesOrGetDefault,
7473
validateFunction,
75-
validateNumber,
7674
validateUint32,
75+
validateFiniteNumber,
7776
} = require('internal/validators');
7877

7978
const kFlushFlag = Symbol('kFlushFlag');
@@ -195,47 +194,6 @@ function zlibOnError(message, errno, code) {
195194
self[kError] = error;
196195
}
197196

198-
// 1. Returns false for undefined and NaN
199-
// 2. Returns true for finite numbers
200-
// 3. Throws ERR_INVALID_ARG_TYPE for non-numbers
201-
// 4. Throws ERR_OUT_OF_RANGE for infinite numbers
202-
const checkFiniteNumber = hideStackFrames((number, name) => {
203-
// Common case
204-
if (number === undefined) {
205-
return false;
206-
}
207-
208-
if (NumberIsFinite(number)) {
209-
return true; // Is a valid number
210-
}
211-
212-
if (NumberIsNaN(number)) {
213-
return false;
214-
}
215-
216-
validateNumber.withoutStackTrace(number, name);
217-
218-
// Infinite numbers
219-
throw new ERR_OUT_OF_RANGE.HideStackFramesError(name, 'a finite number', number);
220-
});
221-
222-
// 1. Returns def for number when it's undefined or NaN
223-
// 2. Returns number for finite numbers >= lower and <= upper
224-
// 3. Throws ERR_INVALID_ARG_TYPE for non-numbers
225-
// 4. Throws ERR_OUT_OF_RANGE for infinite numbers or numbers > upper or < lower
226-
const checkRangesOrGetDefault = hideStackFrames(
227-
(number, name, lower, upper, def) => {
228-
if (!checkFiniteNumber.withoutStackTrace(number, name)) {
229-
return def;
230-
}
231-
if (number < lower || number > upper) {
232-
throw new ERR_OUT_OF_RANGE.HideStackFramesError(name,
233-
`>= ${lower} and <= ${upper}`, number);
234-
}
235-
return number;
236-
},
237-
);
238-
239197
const FLUSH_BOUND = [
240198
[ Z_NO_FLUSH, Z_BLOCK ],
241199
[ BROTLI_OPERATION_PROCESS, BROTLI_OPERATION_EMIT_METADATA ],
@@ -261,7 +219,7 @@ function ZlibBase(opts, mode, handle, { flush, finishFlush, fullFlush }) {
261219

262220
if (opts) {
263221
chunkSize = opts.chunkSize;
264-
if (!checkFiniteNumber(chunkSize, 'options.chunkSize')) {
222+
if (!validateFiniteNumber(chunkSize, 'options.chunkSize')) {
265223
chunkSize = Z_DEFAULT_CHUNK;
266224
} else if (chunkSize < Z_MIN_CHUNK) {
267225
throw new ERR_OUT_OF_RANGE('options.chunkSize',

0 commit comments

Comments
 (0)