mirror of
https://github.com/nodejs/node.git
synced 2025-05-05 12:04:25 +00:00

This commit fixes the Node process crashing when constructors of classes of the zlib module are given invalid options. * Throw an Error when the zlib library rejects the value of windowBits, instead of crashing with an assertion. * Treat windowBits and memLevel options consistently with other ones and don't crash when non-numeric values are given. * Fix bugs in the validation logic: - Don't conflate 0 and undefined when checking if a field of an options object exists. - Treat NaN and Infinity values the same way as values of invalid types instead of allowing to actually set zlib options to NaN or Infinity. PR-URL: https://github.com/nodejs/node/pull/13098 Fixes: https://github.com/nodejs/node/issues/13082 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
38 lines
958 B
JavaScript
38 lines
958 B
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
|
|
const assert = require('assert');
|
|
const zlib = require('zlib');
|
|
|
|
// For raw deflate encoding, requests for 256-byte windows are rejected as
|
|
// invalid by zlib.
|
|
// (http://zlib.net/manual.html#Advanced)
|
|
assert.throws(() => {
|
|
zlib.createDeflateRaw({ windowBits: 8 });
|
|
}, /^Error: Init error$/);
|
|
|
|
// Regression tests for bugs in the validation logic.
|
|
|
|
assert.throws(() => {
|
|
zlib.createGzip({ chunkSize: 0 });
|
|
}, /^RangeError: Invalid chunk size: 0$/);
|
|
|
|
assert.throws(() => {
|
|
zlib.createGzip({ windowBits: 0 });
|
|
}, /^RangeError: Invalid windowBits: 0$/);
|
|
|
|
assert.throws(() => {
|
|
zlib.createGzip({ memLevel: 0 });
|
|
}, /^RangeError: Invalid memLevel: 0$/);
|
|
|
|
{
|
|
const stream = zlib.createGzip({ level: NaN });
|
|
assert.strictEqual(stream._level, zlib.constants.Z_DEFAULT_COMPRESSION);
|
|
}
|
|
|
|
{
|
|
const stream = zlib.createGzip({ strategy: NaN });
|
|
assert.strictEqual(stream._strategy, zlib.constants.Z_DEFAULT_STRATEGY);
|
|
}
|