Compartir a través de


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

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

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