ABR - Klocwork False alarmas y eliminación de errores incorrectos
Pregunta
klocwork reporta un error de: -
"ABR - Desbordamiento de tampón, índice de matriz de 'OIDSP' puede estar fuera de los límites.Formación 'OIDSP' de tamaño 64 puede usar índice Valor (s) -2 ..- 1. "
para esta línea: -
if (check_index_lower_legality (len,-1))
{
oidsp[len-1] = specProb;
}
cuando check_index_lower_legalidad es: -
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 ;
}
Sin embargo, no hay errores cuando check_index_lower_legality
es: -
(que es por cierto, una respuesta incorrecta, en cuanto a los valores de compensación de -2 o -1 habrá un error real en el tiempo de ejecución.
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;
}
¿Alguna idea?
Solución
Podría faltarme algo, pero su función (cheque_index_lower_legalidad) no modifica la variable 'len', ni la devolución de la función se usa para acceder a su matriz, por lo que su fragmento según lo dispuesto parezca generar correctamente un tiempo de ejecuciónSubfírico de tampón (para valores de len <0).¿Podría expandirse el ejemplo si cree que el informe es verdaderamente incorrecto?
gracias, gwyn.
Otros consejos
Este es un error falso.Debe agregar cheque adicional para decirle a LEN es> 1 siempre.
Para que pueda omitir este error agregando una condición totalmente no deseada.
if (check_index_lower_legality (len,-1))
{
if(len > 1)
oidsp[len-1] = specProb;
}
O puede marcar este error como falsa alarma y ejecutar klockworks de nuevo.En el sentido más probable, saldrá de esto en el siguiente informe.
No creo que Klocwork pueda seguir este tipo de lógica.Deberías decirle que check_index_lower_legalidad se comporta de esta manera.