fix: escape WORKDIR and LOG_FILE in bash -c invocations

Paths containing single quotes would break the generated bash -c
script. Use printf '%q' to safely escape both variables, matching
the existing PROMPT escaping approach.
This commit is contained in:
Robert Koller 2026-03-16 05:08:27 +00:00
parent f980fa72bf
commit 126a8f9069

View File

@ -170,11 +170,14 @@ run_delegation() {
echo "Delegating to $AGENT in $WORKDIR (timeout: ${TIMEOUT}s)"
echo "Log: $LOG_FILE"
ESCAPED_WORKDIR="$(printf '%q' "$WORKDIR")"
ESCAPED_LOG="$(printf '%q' "$LOG_FILE")"
if $BACKGROUND; then
(
timeout "$TIMEOUT" bash -c "$(declare -f run_delegation build_claude_cmd build_codex_cmd); \
AGENT='$AGENT' PROMPT='$(printf '%s' "$PROMPT" | sed "s/'/'\\\\''/g")' \
WORKDIR='$WORKDIR' LOG_FILE='$LOG_FILE' FULL_AUTO=$FULL_AUTO \
WORKDIR=$ESCAPED_WORKDIR LOG_FILE=$ESCAPED_LOG FULL_AUTO=$FULL_AUTO \
run_delegation"
EXIT_CODE=$?
echo ""
@ -186,7 +189,7 @@ if $BACKGROUND; then
else
timeout "$TIMEOUT" bash -c "$(declare -f run_delegation build_claude_cmd build_codex_cmd); \
AGENT='$AGENT' PROMPT='$(printf '%s' "$PROMPT" | sed "s/'/'\\\\''/g")' \
WORKDIR='$WORKDIR' LOG_FILE='$LOG_FILE' FULL_AUTO=$FULL_AUTO \
WORKDIR=$ESCAPED_WORKDIR LOG_FILE=$ESCAPED_LOG FULL_AUTO=$FULL_AUTO \
run_delegation"
EXIT_CODE=$?
if [[ $EXIT_CODE -eq 0 ]]; then