> This [FTP](README.md) is rejected

# Rejection Rationale

This FTP was rejected because having a hard limit was felt to be too
heavy-handed.
The [types.h][types] file has definitions for `ZX_CHANNEL_MAX_MSG_BYTES`
and `ZX_CHANNEL_MAX_MSG_HANDLES` that can be examined by the implementor
and used to limit the resource consumption.

Possible directions discussed were annotation based constraints (today
we have `[MaxHandles]` and `[MaxBytes]` attributes).

There are also use cases where we need to express (in the language) possibly
unbounded messages (size, or handles).
Typically, such messages are dynamically assembled to meet the requirements
of the underlying transport (e.g. optimize throughput, adapt to older clients).

# [FIDL Tuning Proposal](README.md) 005

Method Impossible
=================

Field     | Value
----------|--------------------------
Status    | Rejected
Authors   | ianloic@google.com
Submitted | 2018-07-19
Reviewed  | 2018-09-11

[TOC]

## Summary

It should be an error to declare an interface method that may require more
than the maximum number of handles or bytes allowed in a Zircon channel
message.

It's easy to declare FIDL types that may be impossible to send in a single
Zircon channel message.
Developers should be able to avoid defining types that may cause unexpected
runtime errors.

Since we foresee other transports for FIDL data like shared memory,
persistent storage and the network, the limit is on interface methods rather
than on types.

## Motivation

Edge-cases are hard to test well and hard to reason about.
FIDL messages that could be impossible to transmit in exceptional
circumstances are likely to expose poorly tested parts of FIDL services.
They may be exposed to untrusted code.

For example, in `fuchsia.sys`, currently a `FlatNamespace` may contain any
number of handles.
A `LaunchInfo` may contain a `FlatNamespace`.
A call to `Launcher.CreateComponent()` could be crafted (maliciously or
accidentally) that would succeed, but then when the appmgr went to pass the
supplied `LaunchInfo` to `Runner.StartComponent()` the additional handles
supplied would block the successful encoding of the message.

## Design

This modifies the FIDL compiler but not the FIDL language, bindings or wire
format.

The FIDL frontend compiler now keeps track of how many handles and bytes may
be required to represent a message.
Currently a Zircon channel message may only contain up to 64 handles.
The compiler should print an error and fail if any method is defined that
could require more than 64 handles to encode its request or response.
Currently a Zircon channel message may only contain up to 64k bytes.
The compiler should print an error and fail if any method is defined that
could require more than 64k bytes to encode its request or response.

There are two main patterns that fall afoul of this restriction: recursive
types with handles and unbounded vectors of handles (or types that contain
them).
It's fairly straight-forward to avoid these.

## Documentation and Examples

FIDL documentation should document this constraint and ensure that all
examples are valid.
The error messages produced by the compiler should be clear and useful.

## Backwards Compatibility

This breaks FIDL source compatibility.
Many existing interfaces (such as `FlatNamespace` described above) fail to
constrain the number of handles or bytes that may be required.
These interfaces would have to be tightened up.

## Performance

There should be no direct performance impact.
Some interfaces and types may need to be changed if they really want to
support arbitrarily many handles or bytes but they never would have worked
anyway.

## Security

This change reduces the amount of unexpected, under-tested behavior that
applications will experience so it will improve security.

## Testing

The `fidlc` compiler should get some new tests to ensure that its
calculations of handle counts are correct.

## Drawbacks, Alternatives, and Unknowns

This exposes some additional details of the Zircon channel IPC mechanism to
FIDL interface authors.
This seems like a fair trade-off because currently anyone using those
interfaces needs to be aware of those trade-offs.

We could require all strings and vectors to have explicit bounds.
This would encourage interface authors to design types that might be safely
usable across Zircon channels but might limit the flexibility of FIDL types
across other media.

While the only transport for handles is channel messages, there are other
transports for FIDL encoded bytes such as VMOs, network sockets and
persistent storage.
It may be useful to allow some types to opt-out (for example with an
attribute) from this constraint, even though those types would never be able
to be transmitted over a zircon channel.

It may be worth considering incorporating other mechanism into the FIDL
language (pagination / streaming / etc.) before imposing this constraint on
byte lengths.

## Prior Art and References

Unknown

<!-- xrefs -->
[types]: /zircon/system/public/zircon/types.h
