• [^] # Re: Attention quand même

    Posté par (site web personnel) . En réponse à la dépêche La robustesse de nombreux navigateurs web mise en cause. Évalué à 8.

    les pointeurs nuls ne causent pas de trous de sécurité en général. Un pointeur nul, c'est propre. ça segfaulte, et pouf. Libérer un pointeur null est ok avec la plupart des libcs, ça fait juste un no-op.
    Les problèmes plus graves, sont par exemple les buffer overflows, où l'on va écrire trop long dans la mémoire (ie, 100 caractères dans un buffer fixe de 50) et donc écraser d'autres trucs. ça mène à un exploit si on peut écraser l'adresse de retour de la stack, en général. Les double-free() peuvent être assez méchants car eux aussi écrasent de la mémoire. Par exemple, on libère un pointeur vers une structure de 64 octets... On fait d'autres trucs, dont des allocations, qui pourront réutiliser ce bloc libéré... On se trompe et on re-libère le pointeur -> les nouveaux trucs alloués sont détruits.
    C'est pourquoi
    a) on initialise toujours ses pointeurs à NULL comme ça on plante proprement
    b) on n'utilise pas de buffers statiques, où alors on vérifie toutes les longueurs sur les copies et écritures dedans. Mieux vaut utiliser des buffers dynamiques (et les allouer à la bonne taille, bien sûr)
    c) quand on libère un pointeur, on le nullise après pour être sûr de pas pouvoir le réutiliser: free(stuff); stuff = NULL;