Sdílet prostřednictvím


Chyba: strncat-param-overlap

Chyba sanitizátoru adresy: strncat-param-overlap

Kód, který přesune paměť do překrývající se vyrovnávací paměti, může způsobit těžko diagnostikovatelné chyby.

Příklad

Tento příklad ukazuje, jak AddressSanitizer dokáže zachytit chyby způsobené překrývajícími se parametry funkcí CRT.

(Na základě 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;
}

Pokud chcete tento příklad sestavit a otestovat, spusťte tyto příkazy v sadě Visual Studio 2019 verze 16.9 nebo novějším vývojářském příkazovém řádku:

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

Výsledná chyba

Snímek obrazovky ladicího programu zobrazující chybu strncat-param-overlap v příkladu 1

Viz také

Přehled AddressSanitizer
Známé problémy s addressSanitizerem
Referenční dokumentace k sestavení a jazyku AddressSanitizer
Referenční informace k modulu runtime AddressSanitizer
Stínové bajty AddressSanitizer
AddressSanitizer – cloud nebo distribuované testování
Integrace ladicího programu AddressSanitizer
Příklady chyb AddressSanitizer