oxidecomputer / idolatry

An experimental IPC interface definition language for Hubris.
Mozilla Public License 2.0
17 stars 11 forks source link

`max_reply_size` does not account for `Complex` errors #36

Open mkeeter opened 1 year ago

mkeeter commented 1 year ago

When writing a function that returns a Complex error, the error data is returned by serializing it and copying it into the caller's memory.

Right now, we check that caller has provided a large enough buffer here, faulting the caller if they failed us.

However, the generated code for max_reply_size doesn't take Complex errors into account; it only checks the Ok return value.

Given this definition:

        "fancy_error": (
            reply: Result(
                ok: "()",
                err: Complex("FancyNetError"),
            ),
            encoding: Hubpack,
        ),

The generated REPLY_SIZE is simply

pub const FANCY_ERROR_REPLY_SIZE: usize =<() as hubpack::SerializedSize>::MAX_SIZE;

(and this constant is used in the generated max_reply_size).