From a4453b0493670b2f52a65b79fe070c926bc28c8e Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 24 Nov 2021 09:42:24 +0100 Subject: [PATCH 1/2] stream: drain Transform with 0 highWaterMark Fixes: https://github.com/nodejs/node/issues/40935 --- lib/internal/streams/transform.js | 1 + test/parallel/test-stream-passthrough-drain.js | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 test/parallel/test-stream-passthrough-drain.js diff --git a/lib/internal/streams/transform.js b/lib/internal/streams/transform.js index 26e0b07c2956c8..cbd23185fad291 100644 --- a/lib/internal/streams/transform.js +++ b/lib/internal/streams/transform.js @@ -196,6 +196,7 @@ Transform.prototype._write = function(chunk, encoding, callback) { wState.ended || // Backwards compat. length === rState.length || // Backwards compat. rState.length < rState.highWaterMark || + rState.highWaterMark === 0 || rState.length === 0 ) { callback(); diff --git a/test/parallel/test-stream-passthrough-drain.js b/test/parallel/test-stream-passthrough-drain.js new file mode 100644 index 00000000000000..ea1c57f437545b --- /dev/null +++ b/test/parallel/test-stream-passthrough-drain.js @@ -0,0 +1,8 @@ +'use strict'; +const common = require('../common'); +const { PassThrough } = require('stream'); + +const pt = new PassThrough({ highWaterMark: 0 }); +pt.on('drain', common.mustCall()); +pt.write('hello'); +pt.read().toString(); From f88c66689b67d9d6debe714b3ebd9ee41089fed6 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 24 Nov 2021 10:09:50 +0100 Subject: [PATCH 2/2] Update test/parallel/test-stream-passthrough-drain.js Co-authored-by: Luigi Pinca --- test/parallel/test-stream-passthrough-drain.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-stream-passthrough-drain.js b/test/parallel/test-stream-passthrough-drain.js index ea1c57f437545b..f5c98947e21e2e 100644 --- a/test/parallel/test-stream-passthrough-drain.js +++ b/test/parallel/test-stream-passthrough-drain.js @@ -5,4 +5,4 @@ const { PassThrough } = require('stream'); const pt = new PassThrough({ highWaterMark: 0 }); pt.on('drain', common.mustCall()); pt.write('hello'); -pt.read().toString(); +pt.read();