mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
stream: don't push null from closed promise #42694
closed promise is subscribed to first so will be resolved first, before any read promise. This causes data after EOF error to be thrown. Remove the push null from the closed promise handler. The push null gets done from the read handler when it detects done. PR-URL: https://github.com/nodejs/node/pull/45026 Fixes: https://github.com/nodejs/node/issues/42694 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
@@ -32,7 +32,6 @@ const {
|
||||
const {
|
||||
isDestroyed,
|
||||
isReadable,
|
||||
isReadableEnded,
|
||||
isWritable,
|
||||
isWritableEnded,
|
||||
} = require('internal/streams/utils');
|
||||
@@ -528,8 +527,6 @@ function newStreamReadableFromReadableStream(readableStream, options = kEmptyObj
|
||||
reader.closed,
|
||||
() => {
|
||||
closed = true;
|
||||
if (!isReadableEnded(readable))
|
||||
readable.push(null);
|
||||
},
|
||||
(error) => {
|
||||
closed = true;
|
||||
@@ -794,8 +791,6 @@ function newStreamDuplexFromReadableWritablePair(pair = kEmptyObject, options =
|
||||
reader.closed,
|
||||
() => {
|
||||
readableClosed = true;
|
||||
if (!isReadableEnded(duplex))
|
||||
duplex.push(null);
|
||||
},
|
||||
(error) => {
|
||||
writableClosed = true;
|
||||
|
||||
26
test/parallel/test-readable-from-web-enqueue-then-close.js
Normal file
26
test/parallel/test-readable-from-web-enqueue-then-close.js
Normal file
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
const { mustCall } = require('../common');
|
||||
const { Readable, Duplex } = require('stream');
|
||||
const { strictEqual } = require('assert');
|
||||
|
||||
function start(controller) {
|
||||
controller.enqueue(new Uint8Array(1));
|
||||
controller.close();
|
||||
}
|
||||
|
||||
Readable.fromWeb(new ReadableStream({ start }))
|
||||
.on('data', mustCall((d) => {
|
||||
strictEqual(d.length, 1);
|
||||
}))
|
||||
.on('end', mustCall())
|
||||
.resume();
|
||||
|
||||
Duplex.fromWeb({
|
||||
readable: new ReadableStream({ start }),
|
||||
writable: new WritableStream({ write(chunk) {} })
|
||||
})
|
||||
.on('data', mustCall((d) => {
|
||||
strictEqual(d.length, 1);
|
||||
}))
|
||||
.on('end', mustCall())
|
||||
.resume();
|
||||
Reference in New Issue
Block a user