Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

vp aborts with SIGABRT when stdout is piped to a reader that exits early (| head)

已关闭
#2,661 1 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@naokihaba 已经在做这个了。

开始于 2026年9月16日。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
76/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
rust
领域
cli

调研方向

从 vp 启动路径和主线程的 stdout 处理开始;使用 vp --version | head -n 1 和 vp env list-remote --lts | head 复现。跟踪 SIGPIPE 和 BrokenPipe 的处理方式,然后验证被截断管道中的命令会安静地退出,不会出现 SIGABRT 或 coredump。

由索引模型根据 Issue 内容生成。

描述

bug pending triage

Repro (v0.3.1 linux-x64-gnu, also v0.3.0)

$ vp --version | head -n 1
vp v0.3.1
$ echo ${PIPESTATUS[0]}
134

Same with any command that prints, e.g. vp env list-remote --lts | head.

What happens

systemd-coredump records SIGABRT. Strings extracted from the core show the panic message:

thread 'main' panicked at library/std/src/io/stdio.rs:1168:9:
failed printing to stdout: Broken pipe (os error 32)

Root cause is the classic Rust EPIPE footgun: the runtime ignores SIGPIPE, println! panics on the resulting EPIPE error, and the binary is built with panic=abort, so a truncated pipe becomes SIGABRT plus a coredump.

Related

#223 fixed the same panic in a tokio-runtime-worker thread, but the main-thread print path is still affected in 0.3.1 — every vp subcommand that writes to stdout can hit it.

Expected

Exit quietly like standard Unix tools: restore SIG_DFL for SIGPIPE at startup (what ripgrep/bat/fd do), or swallow ErrorKind::BrokenPipe on stdout writes.

Impact beyond the crash itself

Each occurrence litters a systemd coredump, and crash-notification tooling that re-runs vp to investigate (e.g. an agent running vp --version | head) turns one abort into a self-amplifying crash loop — I watched one vp env list-remote abort cascade into several more vp --version aborts this way.

主要语言
Rust
星标
6k
派生
274
平均合并
1 天 11 小时
30 天内合并 PR
196

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

voidzero-dev/vite-plus 的其他 Issue

查看 voidzero-dev/vite-plus 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。