Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8ffdd1e

Browse filesBrowse files
anonrigRafaelGSS
authored andcommitted
zlib: simplify validators
PR-URL: #54442 Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 3cf6457 commit 8ffdd1e
Copy full SHA for 8ffdd1e

File tree

Expand file treeCollapse file tree

2 files changed

+46
-45
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+46
-45
lines changed
Open diff view settings
Collapse file

‎lib/internal/validators.js‎

Copy file name to clipboardExpand all lines: lib/internal/validators.js
+43Lines 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
};
Collapse file

‎lib/zlib.js‎

Copy file name to clipboardExpand all lines: lib/zlib.js
+3-45Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.