From 9b20b5db7b829dff0bcf0383c898c7fc85924369 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 15 Mar 2020 00:50:09 +0100 Subject: [PATCH] stream: don't emit 'finish' after 'error' PR-URL: https://github.com/nodejs/node/pull/32275 Refs: https://github.com/nodejs/node/issues/28710 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- lib/_stream_writable.js | 3 +++ test/parallel/test-stream-writable-write-writev-finish.js | 1 + 2 files changed, 4 insertions(+) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 805cbd0db020c0..3e0a005c520a3c 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -666,6 +666,9 @@ function finishMaybe(stream, state, sync) { function finish(stream, state) { state.pendingcb--; + if (state.errorEmitted) + return; + state.finished = true; stream.emit('finish'); diff --git a/test/parallel/test-stream-writable-write-writev-finish.js b/test/parallel/test-stream-writable-write-writev-finish.js index aa43b1490c8600..9fce315f8b2e1a 100644 --- a/test/parallel/test-stream-writable-write-writev-finish.js +++ b/test/parallel/test-stream-writable-write-writev-finish.js @@ -132,6 +132,7 @@ const stream = require('stream'); process.nextTick(cb); }; w.on('error', common.mustCall()); + w.on('finish', common.mustNotCall()); w.on('prefinish', () => { w.write("shouldn't write in prefinish listener"); });