Skip to content

πŸ› Bug Report β€” Runtime APIs - WritableStream DefaultWriter await write() does not copy chunk bufferΒ #3137

Open
@pmeenan

Description

@pmeenan

If you write a buffer to a TransformStream's WritableStream with await writer.write() and then modify the buffer after the promise completes, the output stream will be corrupted.

As best as I can tell from the spec, it should be safe to modify the chunk after the promise resolves:

If chunk is mutable, producers are advised to avoid mutating it after passing it to write(), until after the promise returned by write() settles. This ensures that the underlying sink receives and processes the same value that was passed in.

As it stands currently, the only safe way to do it is to slice() the buffer to make a copy of it when you pass it to write().

This was discovered as part of working on a worker that uses wasm to compress the response streams in a passthrough transform stream. The resulting stream would be corrupted with chunks being overwritten with later data.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions