wasi-http icon indicating copy to clipboard operation
wasi-http copied to clipboard

Document content length check is applied to outoing-body output-stream

Open guybedford opened this issue 2 years ago • 1 comments

In the current WIT definitions, outgoing-body finish defines that the content length must be validated against the actual length.

But, in addition to this, the Wasmtime implementation also throws a stream error from the output-stream for the outgoing-body as soon as a write is made that exceeds the expected content length. Thus this check is not only performed at finish but also dynamically with each write operation to the stream.

If this is the defined behaviour, it should be documented in the WIT.

guybedford avatar Nov 24 '23 02:11 guybedford

Agreed we should document this on outgoing-body.write!

One way to implement this is for check-write to refuse readiness once the content-length has been reached, but this is difficult to debug because blocking-write would loop forever, or have to trap.

Instead we should specify that check-write may allow writes beyond the content-length, but if those writes are performed, write (or blocking-write or blocking-write-and-flush) will throw a last-operation-failed that will downcast to a HTTP-{request,response}-body-size.

pchickey avatar Nov 27 '23 19:11 pchickey