ABR - ложная тревога Klocwork и некорректное удаление ошибок - PullRequest
0 голосов
/ 15 июля 2010

Klocwork сообщает об ошибке: -

"ABR - переполнение буфера, индекс массива 'oidsp' может быть вне границ. массив 'oidsp' размера 64 может использовать индекс значение (я) -2 ..- 1. "

Для этой строки: -

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

Когда 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 ; 
}

Однако нет ошибки, когда check_index_lower_legality: - (что, кстати, является неправильным ответом, так как для значений смещения -2 или -1 во время выполнения будет настоящая ошибка.

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 июля 2010

Это ложная ошибка. Вам нужно добавить дополнительную проверку, чтобы сказать, что len всегда> 1.

Таким образом, вы можете пропустить эту ошибку, добавив совершенно нежелательное условие if.

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

Или вы можете пометить эту ошибку как ложную тревогу и снова запустить klockworks. В наиболее вероятном смысле это будет пропущено в следующем отчете.

0 голосов
/ 15 июля 2010

Возможно, я что-то упустил, но ваша функция (check_index_lower_legality) не изменяет переменную 'len', а также не возвращает функцию, используемую для доступа к вашему массиву, так что ваш предоставленный фрагмент будет правильно генерировать среду выполнения переполнение буфера (для значений len <0). Не могли бы вы расширить этот пример, если считаете, что отчет действительно неверен? </p>

Спасибо, Гвин.

0 голосов
/ 15 июля 2010

Я не думаю, что Klocwork может следовать этой логике.Вам нужно сказать, что check_index_lower_legality ведет себя так.

...