Domanda

KLOCWORK segnala un errore di: -

.

"ABR - Overflow del buffer, indice di array di 'Oidsp' potrebbe essere fuori limite.Vettore 'Oidsp' di taglia 64 può utilizzare l'indice Valore (s) -2 ..- 1. "

per questa riga: -

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

Quando check_index_lower_legalità è: -

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 ; 
}
.

Tuttavia nessun bug quando check_index_lower_legality è: - (che è attraverso una risposta errata, come per i valori offset di -2 o -1 ci sarà un vero errore in runtime.

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;
}
.

Qualche idea?

È stato utile?

Soluzione

Potrei mancare qualcosa, ma la funzione (check_index_lower_legalità) non modifica la variabile 'Len', né è il ritorno dalla funzione utilizzata per accedere al tuo array, quindi il tuo snippet come fornito verrebbe correttamente generare un runtimeBuffer Underflow (per valori di LEN <0).Potresti forse espandere l'esempio se ritieni che il rapporto sia davvero scorretto?

Grazie, Gwyn.

Altri suggerimenti

Questo è un bug falso.Devi aggiungere un ulteriore controllo per raccontare Len è sempre> 1.

In modo da poter saltare questo bug aggiungendo una condizione totalmente indesiderata.

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

O puoi contrassegnare questo bug come falso allarme e eseguire nuovamente Klockworks.Nel senso più probabile salterà questo nel prossimo rapporto.

Non penso che Klocwork può seguire questo tipo di logica attraverso.Dovresti dirlo che check_index_lower_legalità si comporta in questo modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top