mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
## Summary Fixes #13316 Fixes #18275 Running `bunx cowsay ""` (or any package with an empty string argument) on Windows caused a panic. Additionally, `bunx concurrently "command with spaces"` was splitting quoted arguments incorrectly. **Repro #13316:** ```bash bunx cowsay "" # panic(main thread): reached unreachable code ``` **Repro #18275:** ```bash bunx concurrently "bun --version" "bun --version" # Only runs once, arguments split incorrectly # Expected: ["bun --version", "bun --version"] # Actual: ["bun", "--version", "bun", "--version"] ``` ## Root Cause The bunx fast path on Windows bypasses libuv and calls `CreateProcessW` directly to save 5-12ms. The command line building logic had two issues: 1. **Empty strings**: Not quoted at all, resulting in invalid command line 2. **Arguments with spaces**: Not quoted, causing them to be split into multiple arguments ## Solution Implement Windows command-line argument quoting using libuv's proven algorithm: - Port of libuv's `quote_cmd_arg` function (process backwards + reverse) - Empty strings become `""` - Strings with spaces/tabs/quotes are wrapped in quotes - Backslashes before quotes are properly escaped per Windows rules **Why not use libuv directly?** - Normal `Bun.spawn()` uses `uv_spawn()` which handles quoting internally - bunx fast path bypasses libuv to save 5-12ms (calls `CreateProcessW` directly) - libuv's `quote_cmd_arg` is a static function (not exported) - Solution: port the algorithm to Zig ## Test Plan - [x] Added regression test for empty strings (#13316) - [x] Added regression test for arguments with spaces (#18275) - [x] Verified system bun (v1.3.3) fails both tests - [x] Verified fix passes both tests - [x] Implementation based on battle-tested libuv algorithm 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <claude-bot@bun.sh> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>