Compartilhar via


Erro: strncat-param-overlap

Erro do Address Sanitizer: strncat-param-overlap

O código que move a memória no buffer sobreposto pode causar erros difíceis de diagnosticar.

Exemplo

Este exemplo mostra como o AddressSanitizer pode capturar erros causados por parâmetros sobrepostos às funções CRT.

(Com base em 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 e testar esse exemplo, execute estes comandos em um prompt de comando do desenvolvedor do Visual Studio 2019 versão 16.9 ou posterior:

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

Erro resultante

Captura de tela do depurador exibindo o erro strncat-param-overlap no exemplo 1.

Confira também

Visão geral do AddressSanitizer
Problemas conhecidos do AddressSanitizer
Referência de linguagem e build do AddressSanitizer
Referência de runtime do AddressSanitizer
Bytes de sombra de AddressSanitizer
Nuvem do AddressSanitizer ou teste distribuído
Integração do depurador do AddressSanitizer
Exemplos de erro do AddressSanitizer