diff options
author | Alexey Orlenko <eaglexrlnk@gmail.com> | 2017-05-18 12:49:08 +0300 |
---|---|---|
committer | Alexey Orlenko <eaglexrlnk@gmail.com> | 2017-05-22 01:10:44 +0300 |
commit | 9e4660b5187d4be6a1484e705dc735c0e76ffafa (patch) | |
tree | 11ae67c7e5eb8290ce3a5a61a761895fbbb1f6dd /test/parallel/test-zlib-failed-init.js | |
parent | 6fb27af70a5e7f4eb074352aed578d349c81ceac (diff) | |
download | android-node-v8-9e4660b5187d4be6a1484e705dc735c0e76ffafa.tar.gz android-node-v8-9e4660b5187d4be6a1484e705dc735c0e76ffafa.tar.bz2 android-node-v8-9e4660b5187d4be6a1484e705dc735c0e76ffafa.zip |
zlib: fix node crashing on invalid options
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>
Diffstat (limited to 'test/parallel/test-zlib-failed-init.js')
-rw-r--r-- | test/parallel/test-zlib-failed-init.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/parallel/test-zlib-failed-init.js b/test/parallel/test-zlib-failed-init.js new file mode 100644 index 0000000000..3b6da1d4fb --- /dev/null +++ b/test/parallel/test-zlib-failed-init.js @@ -0,0 +1,37 @@ +'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); +} |