summaryrefslogtreecommitdiff
path: root/lib/_stream_writable.js
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2018-04-17 17:24:22 +0200
committerMatteo Collina <hello@matteocollina.com>2018-04-20 15:12:22 +0200
commit08577906569a4c2de70ad2a861e2f8456cd8fcdd (patch)
treed90569aa4d6099df48ffe16bb22db777c8640a92 /lib/_stream_writable.js
parent700344e388b57651c190222f570d658504b8c06f (diff)
downloadandroid-node-v8-08577906569a4c2de70ad2a861e2f8456cd8fcdd.tar.gz
android-node-v8-08577906569a4c2de70ad2a861e2f8456cd8fcdd.tar.bz2
android-node-v8-08577906569a4c2de70ad2a861e2f8456cd8fcdd.zip
stream: prevent 'end' to be emitted after 'error'
This PR adds _readableState.errorEmitted and add the tracking of it. Fixes: https://github.com/nodejs/node/issues/6083 PR-URL: https://github.com/nodejs/node/pull/20104 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Diffstat (limited to 'lib/_stream_writable.js')
-rw-r--r--lib/_stream_writable.js10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
index d21daf0541..0891f85526 100644
--- a/lib/_stream_writable.js
+++ b/lib/_stream_writable.js
@@ -424,12 +424,22 @@ function onwriteError(stream, state, sync, er, cb) {
// this can emit finish, and it will always happen
// after error
process.nextTick(finishMaybe, stream, state);
+
+ // needed for duplex, fixes https://github.com/nodejs/node/issues/6083
+ if (stream._readableState) {
+ stream._readableState.errorEmitted = true;
+ }
stream._writableState.errorEmitted = true;
stream.emit('error', er);
} else {
// the caller expect this to happen before if
// it is async
cb(er);
+
+ // needed for duplex, fixes https://github.com/nodejs/node/issues/6083
+ if (stream._readableState) {
+ stream._readableState.errorEmitted = true;
+ }
stream._writableState.errorEmitted = true;
stream.emit('error', er);
// this can emit finish, but finish must