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

2 files changed

Lines changed: 46 additions & 45 deletions

File tree

‎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+
constvalidateFiniteNumber=hideStackFrames((number,name)=>{
576+
// Common case
577+
if(number===undefined){
578+
returnfalse;
579+
}
580+
581+
if(NumberIsFinite(number)){
582+
returntrue;// Is a valid number
583+
}
584+
585+
if(NumberIsNaN(number)){
586+
returnfalse;
587+
}
588+
589+
validateNumber(number,name);
590+
591+
// Infinite numbers
592+
thrownewERR_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+
constcheckRangesOrGetDefault=hideStackFrames(
600+
(number,name,lower,upper,def)=>{
601+
if(!validateFiniteNumber(number,name)){
602+
returndef;
603+
}
604+
if(number<lower||number>upper){
605+
thrownewERR_OUT_OF_RANGE(name,`>= ${lower} and <= ${upper}`,number);
606+
}
607+
returnnumber;
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
constkFlushFlag=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-
constcheckFiniteNumber=hideStackFrames((number,name)=>{
203-
// Common case
204-
if(number===undefined){
205-
returnfalse;
206-
}
207-
208-
if(NumberIsFinite(number)){
209-
returntrue;// Is a valid number
210-
}
211-
212-
if(NumberIsNaN(number)){
213-
returnfalse;
214-
}
215-
216-
validateNumber.withoutStackTrace(number,name);
217-
218-
// Infinite numbers
219-
thrownewERR_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-
constcheckRangesOrGetDefault=hideStackFrames(
227-
(number,name,lower,upper,def)=>{
228-
if(!checkFiniteNumber.withoutStackTrace(number,name)){
229-
returndef;
230-
}
231-
if(number<lower||number>upper){
232-
thrownewERR_OUT_OF_RANGE.HideStackFramesError(name,
233-
`>= ${lower} and <= ${upper}`,number);
234-
}
235-
returnnumber;
236-
},
237-
);
238-
239197
constFLUSH_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
}elseif(chunkSize<Z_MIN_CHUNK){
267225
thrownewERR_OUT_OF_RANGE('options.chunkSize',

0 commit comments

Comments
 (0)