diff options
author | Robert Nagy <ronagy@icloud.com> | 2019-09-02 17:30:56 +0200 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-09-22 15:47:40 -0700 |
commit | 8709a408d2eb31a996077cf0ea48c5fbba93adae (patch) | |
tree | ba6024cb11a3e038f79e6fb1011f74fa0bc8c194 /lib/internal/streams | |
parent | 872d803faf568ff71e8808cf9f469a38c67abf61 (diff) | |
download | android-node-v8-8709a408d2eb31a996077cf0ea48c5fbba93adae.tar.gz android-node-v8-8709a408d2eb31a996077cf0ea48c5fbba93adae.tar.bz2 android-node-v8-8709a408d2eb31a996077cf0ea48c5fbba93adae.zip |
stream: use more accurate end-of-stream writable and readable detection
The value of stream.readable and stream.writable should not
be used to detect whether a stream is Writable or Readable.
Refs: https://github.com/nodejs/node/issues/29395
PR-URL: https://github.com/nodejs/node/pull/29409
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib/internal/streams')
-rw-r--r-- | lib/internal/streams/end-of-stream.js | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/internal/streams/end-of-stream.js b/lib/internal/streams/end-of-stream.js index ca6091fe55..949ab63814 100644 --- a/lib/internal/streams/end-of-stream.js +++ b/lib/internal/streams/end-of-stream.js @@ -13,6 +13,18 @@ function isRequest(stream) { return stream.setHeader && typeof stream.abort === 'function'; } +function isReadable(stream) { + return typeof stream.readable === 'boolean' || + typeof stream.readableEnded === 'boolean' || + !!stream._readableState; +} + +function isWritable(stream) { + return typeof stream.writable === 'boolean' || + typeof stream.writableEnded === 'boolean' || + !!stream._writableState; +} + function eos(stream, opts, callback) { if (arguments.length === 2) { callback = opts; @@ -47,8 +59,10 @@ function eos(stream, opts, callback) { }; } - let readable = opts.readable || (opts.readable !== false && stream.readable); - let writable = opts.writable || (opts.writable !== false && stream.writable); + let readable = opts.readable || + (opts.readable !== false && isReadable(stream)); + let writable = opts.writable || + (opts.writable !== false && isWritable(stream)); const onlegacyfinish = () => { if (!stream.writable) onfinish(); |