From 410348b7c10ec80c3847f6b23493d839b64dccf2 Mon Sep 17 00:00:00 2001 From: jakecastelli Date: Wed, 31 Jul 2024 21:43:18 +0930 Subject: [PATCH 1/2] stream: make checking pendingcb on WritableStream backward compatible --- lib/internal/streams/end-of-stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/streams/end-of-stream.js b/lib/internal/streams/end-of-stream.js index 723292faf5bd3a..c44f99e993ad5b 100644 --- a/lib/internal/streams/end-of-stream.js +++ b/lib/internal/streams/end-of-stream.js @@ -214,7 +214,7 @@ function eos(stream, options, callback) { !readable && (!willEmitClose || isReadable(stream)) && (writableFinished || isWritable(stream) === false) && - (wState == null || wState.pendingcb === 0) + (wState == null || wState.pendingcb === undefined || wState.pendingcb === 0) ) { process.nextTick(onclosed); } else if ( From 4491ee5ed65ede0ea0ff424fae8c7417205f1348 Mon Sep 17 00:00:00 2001 From: jakecastelli Date: Wed, 31 Jul 2024 22:25:56 +0930 Subject: [PATCH 2/2] fixup! add a test --- test/parallel/test-stream-finished.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/parallel/test-stream-finished.js b/test/parallel/test-stream-finished.js index 6820ac18cf4b5c..9d66cbe59b11f3 100644 --- a/test/parallel/test-stream-finished.js +++ b/test/parallel/test-stream-finished.js @@ -687,3 +687,16 @@ testClosed((opts) => new Writable({ write() {}, ...opts })); assert.strictEqual(stream._writableState.pendingcb, 0); })); } + +{ + const stream = new Duplex({ + write(chunk, enc, cb) {} + }); + + stream.end('foo'); + + // Simulate an old stream implementation that doesn't have pendingcb + delete stream._writableState.pendingcb; + + finished(stream, { readable: false }, common.mustCall()); +}