fix: bash widget sanitization for &

In the bash widget readline code make sure that bash's `patsub_replacement` is temporarily unset to avoid having ${input}_NAVIEND in the final command when the expanded $replacement contains `&`
This commit is contained in:
Giuseppe Rota 2025-11-26 12:24:40 +01:00 committed by GitHub
parent b01291e040
commit 373ad9393a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -16,8 +16,11 @@ _navi_widget() {
local -r replacement="$(_navi_call --print --query "$last_command")"
local output="$input"
if [ -n "$replacement" ]; then
output="${input}_NAVIEND"
output="${output//$find/$replacement}"
output="${input}_NAVIEND"
output=$(
shopt -u patsub_replacement
printf '%s' "${output//"$find"/"$replacement"}"
)
fi
fi
@ -33,4 +36,4 @@ if [ ${BASH_VERSION:0:1} -lt 4 ]; then
bind '"\C-g": " \C-b\C-k \C-u`_navi_widget_legacy`\e\C-e\C-a\C-y\C-h\C-e\e \C-y\ey\C-x\C-x\C-f"'
else
bind -x '"\C-g": _navi_widget'
fi
fi