Ce qui se passe
wordexp(3), fonction POSIX d'expansion « à la shell », est souvent conseillée
pour transformer ~/foo en /home/moi/foo. Avec le drapeau 0, toutes les
expansions sont actives, substitution de commande comprise :
wordexp("$(cat /etc/passwd)/foo", &p, 0); /* lance cat */Le drapeau qui ne suffit pas
WRDE_NOCMD interdit les commandes, mais seulement si la libc le fait bien :
- musl passe par le shell du système et ne cherche les substitutions que par un balayage sommaire, qui rate des motifs que Bash accepte ;
- macOS délègue à
/usr/lib/system/wordexp-helper. Selon Julian Squires, le même contournement existait encore en 2023 ; zsh étant devenu le shell par défaut, l'auteur n'a pas vérifié s'il persiste.
À faire
Ne pas appeler wordexp sur une entrée non fiable, même avec WRDE_NOCMD. Pour
le seul tilde, une piste de notre part : lire HOME et remplacer soi-même le
préfixe ~/.
Source : yossarian.net, 25 octobre 2026. Source en anglais. Contournement macOS : Julian Squires.