Error: strncat-param-overlap
Error de AddressSanitizer: strncat-param-overlap
El código que mueve la memoria en el búfer superpuesto puede causar errores difíciles de diagnosticar.
Ejemplo
En este ejemplo se muestra cómo AddressSanitizer puede detectar errores que causan parámetros superpuestos en funciones de CRT.
(Basado en 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;
}
Para compilar y probar este ejemplo, ejecute estos comandos en un símbolo del sistema para desarrolladores de Visual Studio 2019 versión 16.9 o posterior:
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
Error resultante
Consulte también
Introducción a AddressSanitizer
Problemas conocidos de AddressSanitizer
Referencia de lenguaje y compilación de AddressSanitizer
Referencia del entorno de ejecución addressSanitizer
Bytes de sombra addressSanitizer
Pruebas distribuidas o en la nube addressSanitizer
Integración del depurador AddressSanitizer
Ejemplos de errores addressSanitizer