Skip to content

Commit

Permalink
zlib: reject windowBits=8 when mode=GZIP
Browse files Browse the repository at this point in the history
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: #33045
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Gerhard Stöbich <[email protected]>
Reviewed-By: David Carlier <[email protected]>
  • Loading branch information
bnoordhuis authored and addaleax committed May 9, 2020
1 parent b8ed2a0 commit d8a380e
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 6 deletions.
4 changes: 3 additions & 1 deletion lib/zlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-zlib-failed-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
);

Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-zlib-zero-windowBits.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
});
}
7 changes: 4 additions & 3 deletions test/parallel/test-zlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand Down

0 comments on commit d8a380e

Please sign in to comment.