summaryrefslogtreecommitdiff
path: root/test/parallel/test-zlib-failed-init.js
diff options
context:
space:
mode:
authorAlexey Orlenko <eaglexrlnk@gmail.com>2017-05-18 12:49:08 +0300
committerAlexey Orlenko <eaglexrlnk@gmail.com>2017-05-22 01:10:44 +0300
commit9e4660b5187d4be6a1484e705dc735c0e76ffafa (patch)
tree11ae67c7e5eb8290ce3a5a61a761895fbbb1f6dd /test/parallel/test-zlib-failed-init.js
parent6fb27af70a5e7f4eb074352aed578d349c81ceac (diff)
downloadandroid-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.js37
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);
+}