pub struct CStrArray<'a> { /* private fields */ }Expand description
Tableau de pointeurs C terminé par NULL, pour le marshalling d’argv /
envp vers execve(2) / execveat(2).
Ces syscalls attendent un argument de type char *const argv[] : une suite
de pointeurs vers des chaînes C terminée par un pointeur NULL. Ce type
matérialise cette frontière de marshalling, qui est fuzzée
(fuzz/fuzz_targets/fuzz_exec_argv.rs) : construction depuis une liste
arbitraire (vide, longue), terminaison NULL toujours présente, ordre
préservé.
Rejet des NUL embarqués — par construction. Un argument C ne peut pas
contenir d’octet NUL (il y serait interprété comme terminateur). L’entrée
étant une tranche de CStr — type qui garantit l’absence de NUL
interne — l’invariant est assuré en amont, là où l’appelant construit ses
&CStr (typiquement via CStr::from_bytes_with_nul ou CString::new, qui
rejettent proprement un NUL embarqué). Aucune revalidation n’est donc
nécessaire ici (Principe 4 : « parse, don’t validate »).
Allocation. La construction alloue un Vec de items.len() + 1
pointeurs : c’est l’exception d’allocation documentée d’ADR-021 §4 (buffer
dynamique intrinsèque — sa taille dépend du nombre d’arguments, inconnu à
la compilation). Les chaînes elles-mêmes ne sont pas copiées : les
pointeurs empruntent les CStr fournis (d’où la durée de vie 'a).