From e902fadc5ee7615b15ce86d1986785c169d59c01 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sat, 23 Nov 2019 23:35:48 +0100 Subject: [PATCH] stream: do not throw multiple callback errors in writable Align ERR_MULTIPLE_CALLBACK in Writable with the rest of error handling as well as how the error is implemented in Transform. PR-URL: https://github.com/nodejs/node/pull/30614 Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca Reviewed-By: James M Snell Reviewed-By: Rich Trott --- lib/_stream_writable.js | 6 ++++-- .../test-stream-writable-callback-twice.js | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 test/parallel/test-stream-writable-callback-twice.js diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index d853441b3cc844..7753eaf1f1c674 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -477,8 +477,10 @@ function onwrite(stream, er) { const sync = state.sync; const cb = state.writecb; - if (typeof cb !== 'function') - throw new ERR_MULTIPLE_CALLBACK(); + if (typeof cb !== 'function') { + errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK()); + return; + } state.writing = false; state.writecb = null; diff --git a/test/parallel/test-stream-writable-callback-twice.js b/test/parallel/test-stream-writable-callback-twice.js new file mode 100644 index 00000000000000..a420bc5c272686 --- /dev/null +++ b/test/parallel/test-stream-writable-callback-twice.js @@ -0,0 +1,14 @@ +'use strict'; +const common = require('../common'); +const { Writable } = require('stream'); +const stream = new Writable({ + write(chunk, enc, cb) { cb(); cb(); } +}); + +stream.on('error', common.expectsError({ + type: Error, + message: 'Callback called multiple times', + code: 'ERR_MULTIPLE_CALLBACK' +})); + +stream.write('foo');