Fehler: strncat-param-overlap

Adress-Sanitizer-Fehler: strncat-param-overlap

Code, der den Speicher im überlappenden Puffer verschiebt, kann zu schwierigen Diagnosefehlern führen.

Beispiel

In diesem Beispiel wird gezeigt, wie AddressSanitizer Fehler erfassen kann, die durch überlappende Parameter für CRT-Funktionen verursacht werden.

(Basierend auf 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;
}

Um dieses Beispiel zu erstellen und zu testen, führen Sie diese Befehle in einer Visual Studio 2019, Version 16.9 oder einer späteren Entwickler-Eingabeaufforderung, aus:

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

Resultierender Fehler

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

Siehe auch

Übersicht über AddressSanitizer
Bekannte Probleme von AddressSanitizer
Kompilierungs- und Sprachreferenz für AddressSanitizer
Runtimereferenz für AddressSanitizer
AddressSanitizer-Schattenbytes
AddressSanitizer-Tests in der Cloud oder verteilten Umgebungen
Integration des AddressSanitizer-Debuggers
AddressSanitizer-Fehlerbeispiele