zlib: reject windowBits=8 when mode=GZIP

It's also handled in C++ land now, per the previous commit, but
intercepting it in JS land makes for prettier error messages.

PR-URL: https://github.com/nodejs/node/pull/33045
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Reviewed-By: David Carlier <devnexen@gmail.com>
This commit is contained in:
Ben Noordhuis 2020-04-24 21:12:32 +02:00 committed by Anna Henningsen
parent b8ed2a07d3
commit d8a380e136
No known key found for this signature in database
GPG Key ID: A94130F0BFC8EBE9
4 changed files with 9 additions and 6 deletions

View File

@ -613,9 +613,11 @@ function Zlib(opts, mode) {
mode === UNZIP)) {
windowBits = 0;
} else {
// `{ windowBits: 8 }` is valid for deflate but not gzip.
const min = Z_MIN_WINDOWBITS + (mode === GZIP ? 1 : 0);
windowBits = checkRangesOrGetDefault(
opts.windowBits, 'options.windowBits',
Z_MIN_WINDOWBITS, Z_MAX_WINDOWBITS, Z_DEFAULT_WINDOWBITS);
min, Z_MAX_WINDOWBITS, Z_DEFAULT_WINDOWBITS);
}
level = checkRangesOrGetDefault(

View File

@ -21,7 +21,7 @@ assert.throws(
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError',
message: 'The value of "options.windowBits" is out of range. It must ' +
'be >= 8 and <= 15. Received 0'
'be >= 9 and <= 15. Received 0'
}
);

View File

@ -28,6 +28,6 @@ const zlib = require('zlib');
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError',
message: 'The value of "options.windowBits" is out of range. ' +
'It must be >= 8 and <= 15. Received 0'
'It must be >= 9 and <= 15. Received 0'
});
}

View File

@ -29,9 +29,10 @@ const fixtures = require('../common/fixtures');
// Should not segfault.
assert.throws(() => zlib.gzipSync(Buffer.alloc(0), { windowBits: 8 }), {
code: 'ERR_ZLIB_INITIALIZATION_FAILED',
name: 'Error',
message: 'Initialization failed',
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError',
message: 'The value of "options.windowBits" is out of range. ' +
'It must be >= 9 and <= 15. Received 8',
});
let zlibPairs = [