Épreuve finale : trois bugs, trois symptômes
Ce mini cache copie clés et valeurs, évince l'entrée la plus ancienne quand il est plein, et peut écrire son contenu dans le buffer d'un appelant. Il cache trois bugs indépendants :
- une fuite
- un use-after-free
- un off-by-one dans une vérification de bornes
Chacun se détecte par un signal différent : un test qui échoue, le sanitizer, ou un test caché.
Votre mission
Travaillez comme un tech lead. Un bug par instruction. Après chaque patch, relancez les tests et le sanitizer et lisez ce qui a changé. N'avancez pas tant que le rapport n'est pas différent, et n'acceptez pas un patch que vous ne savez pas expliquer.
À surveiller
- Chaque slot possède deux allocations.
cache_getrenvoie un pointeur valable seulement jusqu'au prochaincache_put. Et si l'appelant le redonne tel quel ?snprintfrenvoie la longueur qu'il aurait écrite. Que signifie le cas où elle égale la place restante ?