From 2c478175cb091bbea95fabb45f450779d91d4d36 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 26 Apr 2020 11:16:43 +0200 Subject: [PATCH 1/2] stream: write should throw on unknown encoding Validate encoding passed to write(chunk, encoding, cb) and throw if it is invalid. --- lib/_stream_writable.js | 2 ++ .../test-stream-writable-write-error.js | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 3f7989ab097de0..a02caf2a378e9a 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -264,6 +264,8 @@ Writable.prototype.write = function(chunk, encoding, cb) { } else { if (!encoding) encoding = state.defaultEncoding; + else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) + throw new ERR_UNKNOWN_ENCODING(encoding); if (typeof cb !== 'function') cb = nop; } diff --git a/test/parallel/test-stream-writable-write-error.js b/test/parallel/test-stream-writable-write-error.js index eb9b1db06b772b..7d984aca111702 100644 --- a/test/parallel/test-stream-writable-write-error.js +++ b/test/parallel/test-stream-writable-write-error.js @@ -4,17 +4,17 @@ const assert = require('assert'); const { Writable } = require('stream'); -function expectError(w, arg, code, sync) { +function expectError(w, args, code, sync) { if (sync) { if (code) { - assert.throws(() => w.write(arg), { code }); + assert.throws(() => w.write(...args), { code }); } else { - w.write(arg); + w.write(...args); } } else { let errorCalled = false; let ticked = false; - w.write(arg, common.mustCall((err) => { + w.write(...args, common.mustCall((err) => { assert.strictEqual(ticked, true); assert.strictEqual(errorCalled, false); assert.strictEqual(err.code, code); @@ -34,7 +34,7 @@ function test(autoDestroy) { _write() {} }); w.end(); - expectError(w, 'asd', 'ERR_STREAM_WRITE_AFTER_END'); + expectError(w, ['asd'], 'ERR_STREAM_WRITE_AFTER_END'); } { @@ -50,7 +50,7 @@ function test(autoDestroy) { autoDestroy, _write() {} }); - expectError(w, null, 'ERR_STREAM_NULL_VALUES', true); + expectError(w, [null], 'ERR_STREAM_NULL_VALUES', true); } { @@ -58,7 +58,15 @@ function test(autoDestroy) { autoDestroy, _write() {} }); - expectError(w, {}, 'ERR_INVALID_ARG_TYPE', true); + expectError(w, [{}], 'ERR_INVALID_ARG_TYPE', true); + } + + { + const w = new Writable({ + autoDestroy, + _write() {} + }); + expectError(w, ['asd', 'noencoding'], 'ERR_UNKNOWN_ENCODING', true); } } From 017b240be38028406c5921b69739fec040a709df Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 26 Apr 2020 13:00:36 +0200 Subject: [PATCH 2/2] fixup: explicit decodeString=false --- test/parallel/test-stream-writable-write-error.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/parallel/test-stream-writable-write-error.js b/test/parallel/test-stream-writable-write-error.js index 7d984aca111702..069e32e1be8e3e 100644 --- a/test/parallel/test-stream-writable-write-error.js +++ b/test/parallel/test-stream-writable-write-error.js @@ -63,6 +63,7 @@ function test(autoDestroy) { { const w = new Writable({ + decodeStrings: false, autoDestroy, _write() {} });