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

  1. Enter a payload string instead of cancelling the prompt.
  2. Run h3i interactively in a real TTY (docker run -it, no stdin redirection).
  3. 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

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


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)