• [^] # Re: Confus

    Posté par . En réponse au lien Ça veut dire quoi, initialiser un int ?. Évalué à 5.

    Code extrait de l'article du lien

    #include <iostream>
    auto f1() {
     char a[] = {'s', 'e', 'c', 'r', 'e', 't', '0円' };
     std::cout << a << "\n";
    }
    auto f2() {
     char a[8];
     std::cout << a << "\n"; // today this likely prints "secret"
    }
    auto f3() {
     char a[] = {'0', '1', '2', '3', '4', '5', '0円' };
     std::cout << a << "\n"; // overwrites "secret" (if only just)
    }
    int main() {
     f1();
     f2();
     f3();
    }

    L'appel à f2() est susceptible de récupérer la mémoire de la pile de l'appel à f1 tel quel ... et donc avec les données non effacées, et donc récupérer le secret. Ça n'a pas l'air bon pour la sécurité effectivement.