{"record":{"id":"296a0eccc347ca0a","repo":"cloudflare/quiche","slug":"an-error-happened-when-asking-for-payload-try-aga","errorCode":null,"errorMessage":"An error happened when asking for payload, try again later.","messagePattern":"An error happened when asking for payload, try again later\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"h3i/src/prompts/h3/mod.rs","lineNumber":421,"sourceCode":"\n    let fin_stream = prompt_fin_stream()?;\n\n    let action = Action::SendFrame {\n        stream_id,\n        fin_stream,\n        frame: quiche::h3::frame::Frame::GoAway { id },\n        expected_result: Default::default(),\n    };\n\n    Ok(action)\n}\n\nfn prompt_grease() -> InquireResult<Action> {\n    let stream_id = h3::prompt_control_stream_id()?;\n    let raw_type = quiche::h3::grease_value();\n    let payload = Text::new(\"payload:\")\n        .prompt()\n        .expect(\"An error happened when asking for payload, try again later.\");\n\n    let fin_stream = prompt_fin_stream()?;\n\n    let action = Action::SendFrame {\n        stream_id,\n        fin_stream,\n        frame: quiche::h3::frame::Frame::Unknown {\n            raw_type,\n            payload: payload.into(),\n        },\n        expected_result: Default::default(),\n    };\n\n    Ok(action)\n}\n\nfn prompt_extension() -> InquireResult<Action> {\n    let stream_id = h3::prompt_control_stream_id()?;","sourceCodeStart":403,"sourceCodeEnd":439,"githubUrl":"https://github.com/cloudflare/quiche/blob/9f96daa2c22a4468b0036fb0a0a3894eee6498b8/h3i/src/prompts/h3/mod.rs#L403-L439","documentation":"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.","triggerScenarios":"Pressing ESC or Ctrl-C at the 'payload:' prompt; running the interactive h3i prompt in a non-TTY environment (piped stdin, CI).","commonSituations":"Piping input into h3i instead of using a terminal; aborting the prompt mid-flow; running inside a Docker container without -t.","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."],"exampleFix":"// before\n.prompt().expect(\"An error happened when asking for payload, try again later.\");\n// after\n.prompt()?;","handlingStrategy":"try-catch","validationCode":"if !atty::is(atty::Stream::Stdin) {\n    eprintln!(\"interactive prompts require a TTY\");\n    std::process::exit(1);\n}","typeGuard":null,"tryCatchPattern":"let payload = Text::new(\"payload:\").prompt()\n    .map_err(|e| { eprintln!(\"payload prompt cancelled: {e}\"); e })?;","preventionTips":["Run h3i interactively with a real terminal (docker -it).","Avoid piping stdin into interactive prompt mode.","Handle InquireError::OperationCanceled as a graceful skip."],"tags":["cli","interactive-prompt","inquire","panic"],"backgroundTag":"user-aborted-prompt","analyzedSha":"9f96daa2c22a4468b0036fb0a0a3894eee6498b8","analyzedAt":"2026-09-08T11:27:09.536Z","contentChangedAt":"2026-09-08T11:27:09.536Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}