From c5666390266ec2b2c4b2a9cd947ea8387995b1d4 Mon Sep 17 00:00:00 2001 From: Daeyeon Jeong Date: Wed, 5 Mar 2025 12:04:39 +0900 Subject: [PATCH] stream: fix sizeAlgorithm validation in WritableStream Signed-off-by: Daeyeon Jeong PR-URL: https://github.com/nodejs/node/pull/57280 Fixes: https://github.com/nodejs/node/issues/57272 Refs: https://github.com/nodejs/node/pull/56067 Reviewed-By: James M Snell Reviewed-By: Minwoo Jung Reviewed-By: Jason Zhang --- lib/internal/webstreams/writablestream.js | 4 ++- .../test-whatwg-writablestream-close.js | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-whatwg-writablestream-close.js diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 03b48dd043bc41..458ab8d45de5a7 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -1181,7 +1181,9 @@ function writableStreamDefaultControllerGetChunkSize(controller, chunk) { sizeAlgorithm, } = controller[kState]; if (sizeAlgorithm === undefined) { - assert(stream[kState].state === 'errored' || stream[kState].state === 'erroring'); + assert(stream[kState].state === 'closed' || + stream[kState].state === 'errored' || + stream[kState].state === 'erroring'); return 1; } diff --git a/test/parallel/test-whatwg-writablestream-close.js b/test/parallel/test-whatwg-writablestream-close.js new file mode 100644 index 00000000000000..1b987cf0c414ae --- /dev/null +++ b/test/parallel/test-whatwg-writablestream-close.js @@ -0,0 +1,29 @@ +'use strict'; + +require('../common'); +const { test } = require('node:test'); +const assert = require('node:assert'); + +// https://github.com/nodejs/node/issues/57272 + +test('should throw error when writing after close', async (t) => { + const writable = new WritableStream({ + write(chunk) { + console.log(chunk); + }, + }); + + const writer = writable.getWriter(); + + await writer.write('Hello'); + await writer.close(); + + await assert.rejects( + async () => { + await writer.write('World'); + }, + { + name: 'TypeError', + } + ); +});