镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

CompressionStream hangs #51728

Description

@davewasmer

Version

v21.6.1

Platform

Darwin ****** 23.0.0 Darwin Kernel Version 23.0.0: Fri Sep 15 14:42:42 PDT 2023; root:xnu-10002.1.13~1/RELEASE_X86_64 x86_64

Subsystem

globals, streams/web

What steps will reproduce the bug?

function from(src) {
  return new ReadableStream({
    start(controller) {
      controller.enqueue(src);
      controller.close();
    },
  });
}

async function read(stream) {
  const reader = stream.getReader();
  const chunks = [];
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    chunks.push(value);
  }
  return chunks;
}

await read(from(new ArrayBuffer([0, 0, 0, 0])).pipeThrough(new CompressionStream('gzip')));

How often does it reproduce? Is there a required condition?

Every time

What is the expected behavior? Why is that the expected behavior?

Should resolve to [Uint8Array(10), Uint8Array(10)].

What do you see instead?

Nothing - reader.read() hangs and never resolves.

Additional information

Running the code snippet in Chrome devtools console produces the correct outcome. Using 'deflate' rather than 'gzip' has no effect, it still hangs.

Activity

  1. IlyasShabi commented on Feb 13, 2024

    @IlyasShabi
    Member

    I explored the issue and it appears that Nodejs expects the "chunk" argument in the _write function to be either a string, Buffer, or Uint8Array, not an ArrayBuffer.

    A potential workaround involves converting the ArrayBuffer to a Buffer before processing it:

    const buffer = Buffer.from(new ArrayBuffer([0, 0, 0, 0]));
    

    @nodejs/streams I experimented with converting ArrayBuffer to Buffer directly within the _write function like this:

    if (Stream._isAnyArrayBuffer(chunk)) {
        encoding = 'buffer';
        chunk = Buffer.from(chunk, encoding);
    }
    

    It worked, but I'm not convinced it's the best way to add support ArrayBuffer

  2. marco-ippolito commented on Feb 14, 2024

    @marco-ippolito
    Member

    Hi @IlyasShabi would you like to open a PR with your solution? I think it's worth giving it a try

  3. github-actions commented on May 23, 2026

    @github-actions
    Contributor

    This issue has been marked as stale due to 210 days of inactivity.
    It will be automatically closed in 30 days if no further activity occurs. If this is still relevant, please leave a comment or update it to keep it open.

  4. added
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on May 23, 2026
  5. github-actions commented on Jun 22, 2026

    @github-actions
    Contributor

    This issue has been automatically closed after 30 days of inactivity following its stale status (no activity for a total of 240 days).
    If this is still relevant, feel free to reopen it or leave a comment with additional details so we can continue the discussion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions