ABR - Klocwork alarmes falsos e incorretos erro de eliminação
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?
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.