Partager via


Erreur : strncat-param-overlap

Erreur d’assainissement de l’adresse : strncat-param-chevauchement

Le code qui déplace la mémoire dans la mémoire tampon qui se chevauche peut entraîner des erreurs difficiles à diagnostiquer.

Exemple

Cet exemple montre comment AddressSanitizer peut intercepter les erreurs provoquées par des paramètres superposés aux fonctions CRT.

(Basé sur llvm-project/compiler-rt/test/asan/TestCases/strncat-overlap.cpp.)

// example1.cpp
// strncat-param-overlap error
#include <string.h>

void bad_function() {
    char buffer[] = "hello\0XXX";
    strncat(buffer, buffer + 1, 3); // BOOM
    return;
}

int main(int argc, char **argv) {
    bad_function();
    return 0;
}

Pour générer et tester cet exemple, exécutez ces commandes dans une invite de commandes développeur Visual Studio 2019 version 16.9 ou ultérieure :

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

Erreur résultante

Screenshot of debugger displaying strncat-param-overlap error in example 1.

Voir aussi

Vue d’ensemble de AddressSanitizer
Résoudre les problèmes connus liés à AddressSanitizer
Référence de build et de langage AddressSanitizer
Informations de référence sur le runtime AddressSanitizer
Octets d’ombre AddressSanitizer
Test cloud ou distribué AddressSanitizer
Intégration du débogueur AddressSanitizer
Exemples d’erreur AddressSanitizer