Błąd: strncat-param-overlap

Błąd sanitizera adresu: strncat-param-nakładające się

Kod, który przenosi pamięć w nakładających się buforach, może powodować błędy trudne do zdiagnozowania.

Przykład

W tym przykładzie pokazano, jak narzędzie AddressSanitizer może przechwytywać błędy spowodowane nakładającymi się parametrami funkcji CRT.

(Na podstawie 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;
}

Aby skompilować i przetestować ten przykład, uruchom następujące polecenia w wierszu polecenia programu Visual Studio 2019 w wersji 16.9 lub nowszej:

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

Wynikowy błąd

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

Zobacz też

AddressSanitizer — omówienie
Rozwiązywanie znanych problemów z programemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego AddressSanitizer)
Bajty w tle addressSanitizer
AddressSanitizer — chmura lub testowanie rozproszone
Integracja debugera AddressSanitizer
Przykłady błędów addressSanitizer