cloudflare/quiche · warning
An error happened when asking for payload, try again later.
Error message
An error happened when asking for payload, try again later.
What it means
In h3i's interactive prompt, prompt_grease sends a GREASE frame and panics if the inquire Text prompt for the payload returns an error. Inquire's prompt() errors when the user cancels (ESC/Ctrl-C) or the terminal is not interactive.
Solutions
- Enter a payload string instead of cancelling the prompt.
- Run h3i interactively in a real TTY (docker run -it, no stdin redirection).
- Replace the expect with ? so cancellation gracefully aborts the prompt flow.
Example fix
// before
.prompt().expect("An error happened when asking for payload, try again later.");
// after
.prompt()?; Defensive patterns
Strategy: try-catch
Validate before calling
if !atty::is(atty::Stream::Stdin) {
eprintln!("interactive prompts require a TTY");
std::process::exit(1);
} Try / catch
let payload = Text::new("payload:").prompt()
.map_err(|e| { eprintln!("payload prompt cancelled: {e}"); e })?; Prevention
- Run h3i interactively with a real terminal (docker -it).
- Avoid piping stdin into interactive prompt mode.
- Handle InquireError::OperationCanceled as a graceful skip.
When it happens
Trigger: Pressing ESC or Ctrl-C at the 'payload:' prompt; running the interactive h3i prompt in a non-TTY environment (piped stdin, CI).
Common situations: Piping input into h3i instead of using a terminal; aborting the prompt mid-flow; running inside a Docker container without -t.
Related errors
- An error happened, stopping.
- --connect-to is expected to be a string containing an IPv4…
- --connect-to is expected to be a string containing an IPv4…
- unable to parse bind address
- Unsupported HTTP version and DATAGRAM protocol.
AI-assisted analysis of cloudflare/quiche@9f96daa2c2 (2026-09-08).
Data as JSON: /api/errors/296a0eccc347ca0a.
Report an issue: GitHub.
Appendix: source
Thrown at h3i/src/prompts/h3/mod.rs:421
let fin_stream = prompt_fin_stream()?;
let action = Action::SendFrame {
stream_id,
fin_stream,
frame: quiche::h3::frame::Frame::GoAway { id },
expected_result: Default::default(),
};
Ok(action)
}
fn prompt_grease() -> InquireResult<Action> {
let stream_id = h3::prompt_control_stream_id()?;
let raw_type = quiche::h3::grease_value();
let payload = Text::new("payload:")
.prompt()
.expect("An error happened when asking for payload, try again later.");
let fin_stream = prompt_fin_stream()?;
let action = Action::SendFrame {
stream_id,
fin_stream,
frame: quiche::h3::frame::Frame::Unknown {
raw_type,
payload: payload.into(),
},
expected_result: Default::default(),
};
Ok(action)
}
fn prompt_extension() -> InquireResult<Action> {
let stream_id = h3::prompt_control_stream_id()?;View on GitHub (pinned to 9f96daa2c2)