Retour à la leçon
Mission

Mission : un démon qui décode mal ses longueurs et ignore ses échecs

Corriger un bug d'endianness silencieux et un sous-processus dont l'échec est ignoré, puis raisonner sur le risque de perte de logs bufferisés en cas de panic = abort.

Contexte

Un démon d'infrastructure lit un fichier binaire produit par un système tiers qui encode toutes ses longueurs en big-endian. La fonction de décodage a été écrite ainsi :

rust
fn lire_longueur(octets: &[u8; 4]) -> u32 {
    u32::from_le_bytes(*octets) // decode en little-endian
}

Le démon lance aussi périodiquement un script de sauvegarde :

rust
std::process::Command::new("backup.sh").output();

Le programme ne plante jamais et tourne en apparence normalement, mais l'équipe constate en production des comportements incohérents en aval (allocations de tailles absurdes, données tronquées) qu'elle n'arrive pas à relier à une erreur précise dans les logs.