Merge pull request #2054 from anthropics/fix-2043-windows-posix-path

security-guidance: convert POSIX script paths to Windows form on Git Bash
This commit is contained in:
Mohamed Hegazy 2026-05-27 14:49:38 -07:00 committed by GitHub
commit e77ff913ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -22,6 +22,29 @@
# "${CLAUDE_PLUGIN_ROOT}/hooks/security_reminder_hook.py" # "${CLAUDE_PLUGIN_ROOT}/hooks/security_reminder_hook.py"
set -e set -e
# Git Bash / MSYS on Windows hands script paths to this shim in POSIX form
# (`/c/Users/...`). When we exec a Windows `python.exe` (which we do on
# Windows since `python3` is the Microsoft Store stub), python interprets the
# leading `/` as the root of the current drive — e.g. `/c/Users/...` becomes
# `C:\c\Users\...` or `D:\c\Users\...` (whichever drive the shell is on),
# fails with ENOENT, and every Edit/Write/MultiEdit tool use blocks until the
# session restarts. See anthropics/claude-plugins-official#2043.
#
# Fix: convert absolute path args to native Windows form via `cygpath -w`
# before exec. `cygpath` is a Git Bash builtin; it's absent on macOS/Linux,
# where the `command -v` guard makes this a no-op. `cygpath -w` is idempotent
# for already-Windows paths so the rare mixed-form case is safe.
if command -v cygpath >/dev/null 2>&1; then
converted=()
for a in "$@"; do
case "$a" in
/*) converted+=("$(cygpath -w "$a")") ;;
*) converted+=("$a") ;;
esac
done
set -- "${converted[@]}"
fi
probe() { probe() {
# $1..N: the interpreter command (may be multi-word like `py -3`) # $1..N: the interpreter command (may be multi-word like `py -3`)
# Probe writes the major version to stdout and exits 0 iff it's >=3. # Probe writes the major version to stdout and exits 0 iff it's >=3.