Pergunta

A ferramenta de análise estática que a utilização é a sinalização de código C semelhante à seguinte como uma sobrecarga da memória intermédia crítico.

#define size 64
char  buf [size + 1] = "";
memset (buf, 0, size + 1);

mensagem de erro da ferramenta é: Buffer Overflow (Array Índice Out of Bounds.): A matriz de tamanho 'buf' é 1. Matriz 'buf' pode usar o índice 0..64

Este é legítimo? Será que a atribuição da matriz de caracteres para a cadeia vazia realmente resultar em seu comprimento ser reduzido a um único byte, como se estivesse definido como char buf [] = "";?

Foi útil?

Solução

A atribuição de "" para buf [size + 1] não redefine o tamanho do buf, mas é inútil, porque é duplicar uma pequena parte do que o memset posterior faz (e que confunde a sua ferramenta de análise estática - você pode quer enviar um relatório de bug contra ele).

Outras dicas

Para além do facto de carvão animal buf [tamanho + 1] não irá compilar porque o tamanho é um valor de tempo de execução, partindo do princípio que poderia construir buf como uma matriz de tamanho 65, em seguida, memset (buf, 0, 65) não seria um transbordar.

As probabilidades são sua ferramenta é confundido por seus problemas sintáticos.

[Edit: mais informações]

Com base em comentários ao meu post original, eu sugiro o seguinte:

#define size 64
char buf[size+1];
strcpy(buf, "");
memset(buf, 0, size+1);

Eu acredito que Rob Kennedy está correta; sua ferramenta está usando o valor da cadeia inicializador vazio como o tamanho da matriz em vez da declaração de matriz estático.

Não é um estouro de buffer.

Esta é provavelmente uma maneira mais limpa de fazê-lo. Certamente é preciso menos linhas de código.

#define size 64
char buf[size + 1] = {0};

É legal - o buffer é grande o suficiente. A ferramenta está avisando que size_t pode ser maior do que int e tentar usá-lo como indexador pode levar a resultados imprevisíveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top