Skip to content

Commit b514bd2

Browse files
committed
zlib: use RangeError/TypeError consistently
PR-URL: #11391 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
1 parent 8e69f7e commit b514bd2

File tree

3 files changed

+30
-28
lines changed

3 files changed

+30
-28
lines changed

lib/zlib.js

+16-14
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ for (var ck = 0; ck < ckeys.length; ck++) {
3131
codes[codes[ckey]] = ckey;
3232
}
3333

34-
function isValidFlushFlag(flag) {
35-
return flag >= constants.Z_NO_FLUSH &&
36-
flag <= constants.Z_BLOCK;
34+
function isInvalidFlushFlag(flag) {
35+
return typeof flag !== 'number' ||
36+
flag < constants.Z_NO_FLUSH ||
37+
flag > constants.Z_BLOCK;
3738

3839
// Covers: constants.Z_NO_FLUSH (0),
3940
// constants.Z_PARTIAL_FLUSH (1),
@@ -141,11 +142,11 @@ class Zlib extends Transform {
141142
this._opts = opts;
142143
this._chunkSize = opts.chunkSize || constants.Z_DEFAULT_CHUNK;
143144

144-
if (opts.flush && !isValidFlushFlag(opts.flush)) {
145-
throw new Error('Invalid flush flag: ' + opts.flush);
145+
if (opts.flush && isInvalidFlushFlag(opts.flush)) {
146+
throw new RangeError('Invalid flush flag: ' + opts.flush);
146147
}
147-
if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {
148-
throw new Error('Invalid flush flag: ' + opts.finishFlush);
148+
if (opts.finishFlush && isInvalidFlushFlag(opts.finishFlush)) {
149+
throw new RangeError('Invalid flush flag: ' + opts.finishFlush);
149150
}
150151

151152
this._flushFlag = opts.flush || constants.Z_NO_FLUSH;
@@ -154,37 +155,38 @@ class Zlib extends Transform {
154155

155156
if (opts.chunkSize) {
156157
if (opts.chunkSize < constants.Z_MIN_CHUNK) {
157-
throw new Error('Invalid chunk size: ' + opts.chunkSize);
158+
throw new RangeError('Invalid chunk size: ' + opts.chunkSize);
158159
}
159160
}
160161

161162
if (opts.windowBits) {
162163
if (opts.windowBits < constants.Z_MIN_WINDOWBITS ||
163164
opts.windowBits > constants.Z_MAX_WINDOWBITS) {
164-
throw new Error('Invalid windowBits: ' + opts.windowBits);
165+
throw new RangeError('Invalid windowBits: ' + opts.windowBits);
165166
}
166167
}
167168

168169
if (opts.level) {
169170
if (opts.level < constants.Z_MIN_LEVEL ||
170171
opts.level > constants.Z_MAX_LEVEL) {
171-
throw new Error('Invalid compression level: ' + opts.level);
172+
throw new RangeError('Invalid compression level: ' + opts.level);
172173
}
173174
}
174175

175176
if (opts.memLevel) {
176177
if (opts.memLevel < constants.Z_MIN_MEMLEVEL ||
177178
opts.memLevel > constants.Z_MAX_MEMLEVEL) {
178-
throw new Error('Invalid memLevel: ' + opts.memLevel);
179+
throw new RangeError('Invalid memLevel: ' + opts.memLevel);
179180
}
180181
}
181182

182183
if (opts.strategy && isInvalidStrategy(opts.strategy))
183-
throw new Error('Invalid strategy: ' + opts.strategy);
184+
throw new TypeError('Invalid strategy: ' + opts.strategy);
184185

185186
if (opts.dictionary) {
186187
if (!(opts.dictionary instanceof Buffer)) {
187-
throw new Error('Invalid dictionary: it should be a Buffer instance');
188+
throw new TypeError(
189+
'Invalid dictionary: it should be a Buffer instance');
188190
}
189191
}
190192

@@ -280,7 +282,7 @@ class Zlib extends Transform {
280282
var last = ending && (!chunk || ws.length === chunk.length);
281283

282284
if (chunk !== null && !(chunk instanceof Buffer))
283-
return cb(new Error('invalid input'));
285+
return cb(new TypeError('invalid input'));
284286

285287
if (!this._handle)
286288
return cb(new Error('zlib binding closed'));

test/parallel/test-zlib-deflate-constructors.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ assert.ok(new zlib.DeflateRaw() instanceof zlib.DeflateRaw);
1515
// Throws if `opts.chunkSize` is invalid
1616
assert.throws(
1717
() => { new zlib.Deflate({chunkSize: -Infinity}); },
18-
/^Error: Invalid chunk size: -Infinity$/
18+
/^RangeError: Invalid chunk size: -Infinity$/
1919
);
2020

2121
// Confirm that maximum chunk size cannot be exceeded because it is `Infinity`.
@@ -24,23 +24,23 @@ assert.strictEqual(zlib.constants.Z_MAX_CHUNK, Infinity);
2424
// Throws if `opts.windowBits` is invalid
2525
assert.throws(
2626
() => { new zlib.Deflate({windowBits: -Infinity}); },
27-
/^Error: Invalid windowBits: -Infinity$/
27+
/^RangeError: Invalid windowBits: -Infinity$/
2828
);
2929

3030
assert.throws(
3131
() => { new zlib.Deflate({windowBits: Infinity}); },
32-
/^Error: Invalid windowBits: Infinity$/
32+
/^RangeError: Invalid windowBits: Infinity$/
3333
);
3434

3535
// Throws if `opts.level` is invalid
3636
assert.throws(
3737
() => { new zlib.Deflate({level: -Infinity}); },
38-
/^Error: Invalid compression level: -Infinity$/
38+
/^RangeError: Invalid compression level: -Infinity$/
3939
);
4040

4141
assert.throws(
4242
() => { new zlib.Deflate({level: Infinity}); },
43-
/^Error: Invalid compression level: Infinity$/
43+
/^RangeError: Invalid compression level: Infinity$/
4444
);
4545

4646
// Throws a RangeError if `level` invalid in `Deflate.prototype.params()`
@@ -57,12 +57,12 @@ assert.throws(
5757
// Throws if `opts.memLevel` is invalid
5858
assert.throws(
5959
() => { new zlib.Deflate({memLevel: -Infinity}); },
60-
/^Error: Invalid memLevel: -Infinity$/
60+
/^RangeError: Invalid memLevel: -Infinity$/
6161
);
6262

6363
assert.throws(
6464
() => { new zlib.Deflate({memLevel: Infinity}); },
65-
/^Error: Invalid memLevel: Infinity$/
65+
/^RangeError: Invalid memLevel: Infinity$/
6666
);
6767

6868
// Does not throw if opts.strategy is valid
@@ -89,13 +89,13 @@ assert.doesNotThrow(
8989
// Throws if opt.strategy is the wrong type.
9090
assert.throws(
9191
() => { new zlib.Deflate({strategy: '' + zlib.constants.Z_RLE }); },
92-
/^Error: Invalid strategy: 3$/
92+
/^TypeError: Invalid strategy: 3$/
9393
);
9494

9595
// Throws if opts.strategy is invalid
9696
assert.throws(
9797
() => { new zlib.Deflate({strategy: 'this is a bogus strategy'}); },
98-
/^Error: Invalid strategy: this is a bogus strategy$/
98+
/^TypeError: Invalid strategy: this is a bogus strategy$/
9999
);
100100

101101
// Throws TypeError if `strategy` is invalid in `Deflate.prototype.params()`
@@ -107,5 +107,5 @@ assert.throws(
107107
// Throws if opts.dictionary is not a Buffer
108108
assert.throws(
109109
() => { new zlib.Deflate({dictionary: 'not a buffer'}); },
110-
/^Error: Invalid dictionary: it should be a Buffer instance$/
110+
/^TypeError: Invalid dictionary: it should be a Buffer instance$/
111111
);

test/parallel/test-zlib-flush-flags.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ assert.doesNotThrow(() => {
99

1010
assert.throws(() => {
1111
zlib.createGzip({ flush: 'foobar' });
12-
}, /Invalid flush flag: foobar/);
12+
}, /^RangeError: Invalid flush flag: foobar$/);
1313

1414
assert.throws(() => {
1515
zlib.createGzip({ flush: 10000 });
16-
}, /Invalid flush flag: 10000/);
16+
}, /^RangeError: Invalid flush flag: 10000$/);
1717

1818
assert.doesNotThrow(() => {
1919
zlib.createGzip({ finishFlush: zlib.constants.Z_SYNC_FLUSH });
2020
});
2121

2222
assert.throws(() => {
2323
zlib.createGzip({ finishFlush: 'foobar' });
24-
}, /Invalid flush flag: foobar/);
24+
}, /^RangeError: Invalid flush flag: foobar$/);
2525

2626
assert.throws(() => {
2727
zlib.createGzip({ finishFlush: 10000 });
28-
}, /Invalid flush flag: 10000/);
28+
}, /^RangeError: Invalid flush flag: 10000$/);

0 commit comments

Comments
 (0)