La string spécifique se bloque [, [[

Bien que les tests fuzz, j'ai trouvé que c'est possible, en définissant

var=$'\365\\' 

, pour que les deux commands suivantes (utilisées pour supprimer tout jusqu'au dernier saut de ligne) se bloquent indéfiniment, consommant 100% de CPU dans Bash 4.2.25 (1) -release (x86_64-pc-linux-gnu):

 [ -n "${var##*$'\n'}" ] [[ -n "${var##*$'\n'}" ]] 

Le process bash ne peut pas être interrompu avec SIGINT ( CtrlC ou kill -SIGINT $pid ) ou SIGTERM , mais doit être tué avec SIGKILL .

J'ai essayé d'inspecter la valeur en utilisant

 uniname -bcp <<<"$var" 

mais ça aussi. uniname , cependant, peut être tué avec SIGINT .

J'ai aussi vérifié d'autres commands de base, mais toutes fonctionnent bien:

 echo "$var" printf '%q\n' "$var" touch -- "$var" rm -- "$var" 

Que se passe t-il ici? Est-ce reproductible par d'autres? Et ce comportement est-il défini?

C'est un bogue dans bash-4.2 jusqu'au patch 29 dans les locales UTF-8 liées au globbing avec des strings contenant des caractères UTF-8 invalides ( \365\\ ).

Vous pouvez également le reproduire avec:

 : *$'\365x' 

Cela a été corrigé dans le patch 30 , voir la description du patch et la discussion sur la list de diffusion pour plus de détails.