Skip to content

Commit ecdf6dd

Browse files
anonrigtargos
authored andcommitted
zlib: simplify validators
PR-URL: #54442 Reviewed-By: James M Snell <jasnell@gmail.com>
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

Lines changed: 43 additions & 0 deletions
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

Lines changed: 3 additions & 45 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy