Compartir por


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

Captura de pantalla del depurador en la que se muestra el error strncat-param-overlap en el ejemplo 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