Pergunta

Klocwork relata um erro de:-

"ABR – estouro de Buffer, o índice de matriz de 'oidsp' pode estar fora dos limites.Matriz 'oidsp' do tamanho de 64 pode usar o índice valor do(s) -2..-1."

Por esta linha:-

if (check_index_lower_legality (len,-1))
{
oidsp[len-1] = specProb;
}

Quando check_index_lower_legality é:-

bool check_index_lower_legality (int index, int offset)
/**
 * This function checks that the index with the offset isn't 
 * below zero. 
 * If it is - returns 0 ;
 * If isn't - returns 1 ;
 **/
{

if (  (index + offset )<0) {
   return 0;
  }
 return 1 ; 
}

No entanto, nenhum bug quando check_index_lower_legality é:- (que é a maneira incorreta de uma resposta , como para os valores de deslocamento de -2 ou -1 haverá um real de erro em tempo de execução.

bool check_index_lower_legality (int index, int offset)
/**
 * This function checks that the index with the offset isn't 
 * below zero. 
 * If it is - returns 0 ;
 * If isn't - returns 1 ;
 **/
{
 if (index <=0) {
  return 0;
 }
 return 1;
}

Qualquer idéias?

Foi útil?

Solução

Eu poderia estar faltando algo, mas sua função (check_index_lower_legality) não modificar o 'len' variável, nem é o retorno da função usado para acessar sua matriz, para o seu fragmento, como previsto seria exibido corretamente gerar um tempo de execução de buffer de underflow (para valores de len < 0).Você poderia, talvez, expandir o exemplo se você acredita que o relatório seja verdadeiramente incorreta?

Obrigado, Gwyn.

Outras dicas

Isto é falso erro.Você precisa adicionar verificação adicional para contar len é > sempre de 1.

Portanto, você pode ignorar este erro adicionando um totalmente indesejável condição se.

if (check_index_lower_legality (len,-1)) 
{
if(len > 1) 
oidsp[len-1] = specProb; 
} 

Ou você pode marcar esse bug como alarme falso e executar klockworks novamente."É mais provável sentido de ignorar isso, no próximo relatório.

Eu não acho que Klocwork pode seguir este tipo de lógica através de.Você precisa dizer a ele que check_index_lower_legality se comporta dessa maneira.

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