From f2f56b64645d30ea5b4ec82dde7b5470ac5fd434 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Thu, 10 Oct 2024 10:09:04 +0200 Subject: [PATCH] Avoid exceptions in the console with ill-formed flate streams It fixes #18876. --- src/core/flate_stream.js | 13 +++++++++++-- src/core/writer.js | 10 ++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/core/flate_stream.js b/src/core/flate_stream.js index f1753d01b..90bcefb26 100644 --- a/src/core/flate_stream.js +++ b/src/core/flate_stream.js @@ -161,8 +161,17 @@ class FlateStream extends DecodeStream { try { const { readable, writable } = new DecompressionStream("deflate"); const writer = writable.getWriter(); - writer.write(bytes); - writer.close(); + await writer.ready; + + // We can't await writer.write() because it'll block until the reader + // starts which happens few lines below. + writer + .write(bytes) + .then(async () => { + await writer.ready; + await writer.close(); + }) + .catch(() => {}); const chunks = []; let totalLength = 0; diff --git a/src/core/writer.js b/src/core/writer.js index 6672e425e..54af13b49 100644 --- a/src/core/writer.js +++ b/src/core/writer.js @@ -71,8 +71,14 @@ async function writeStream(stream, buffer, transform) { try { const cs = new CompressionStream("deflate"); const writer = cs.writable.getWriter(); - writer.write(bytes); - writer.close(); + await writer.ready; + writer + .write(bytes) + .then(async () => { + await writer.ready; + await writer.close(); + }) + .catch(() => {}); // Response::text doesn't return the correct data. const buf = await new Response(cs.readable).arrayBuffer();