Frage

Klocwork meldet einen Fehler von:-

"ABR - Pufferüberlauf, Array -Index von 'OIDSP' kann außerhalb der Grenzen liegen.Array 'oidsp' der Größe 64 kann den Indexwert (s) -2 verwenden .- 1. "

Für diese Zeile:-

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

Wenn check_index_lower_legality ist:-

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

Allerdings kein Fehler, wenn check_index_lower_legality IS: -(Dies ist übrigens eine falsche Antwort, wie bei den Offset -Werten von -2 oder -1 wird es einen echten Fehler auf der Laufzeit geben.

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

Irgendwelche Ideen?

War es hilfreich?

Lösung

Mir könnte etwas fehlen, aber Ihre Funktion (check_index_lower_legality) ändert weder die Variable „len“, noch wird die Rückgabe der Funktion für den Zugriff auf Ihr Array verwendet, sodass Ihr Snippet in der bereitgestellten Form anscheinend korrekt einen Laufzeitpufferunterlauf generiert ( für Werte von len < 0).Könnten Sie das Beispiel vielleicht näher erläutern, wenn Sie glauben, dass der Bericht wirklich falsch ist?

Danke, Gwyn.

Andere Tipps

Das ist ein falscher Fehler.Sie müssen eine zusätzliche Prüfung hinzufügen, um sicherzustellen, dass len immer > 1 ist.

Sie können diesen Fehler also überspringen, indem Sie eine völlig unerwünschte if-Bedingung hinzufügen.

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

Oder Sie können diesen Fehler als Fehlalarm markieren und klockworks erneut ausführen.Dies wird höchstwahrscheinlich im nächsten Bericht weggelassen.

Ich glaube nicht, dass Klocwork dieser Art von Logik folgen kann.Sie müssten ihm mitteilen, dass sich check_index_lower_legality so verhält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top