Ошибка: strncat-param-overlap
Ошибка санитизатора адреса: strncat-param-overlap
Код, перемещающий память в перекрывающемся буфере, может вызвать ошибки, которые трудно диагностировать.
Пример
В этом примере показано, как AddressSanitizer может перехватывать ошибки, вызванные перекрывающимися параметрами функций CRT.
(На основе llvm-project/компилятор-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;
}
Чтобы создать и проверить этот пример, выполните следующие команды в командной строке разработчика Visual Studio 2019 версии 16.9 или более поздней:
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
Результирующая ошибка
См. также
Обзор AddressSanitizer
Известные проблемы AddressSanitizer
Справочник по сборке и языку AddressSanitizer
Справочник по среде выполнения AddressSanitizer
Теневой байт AddressSanitizer
Облачное или распределенное тестирование AddressSanitizer
Интеграция отладчика AddressSanitizer
Примеры ошибок AddressSanitizer