문제

KlocWork는 다음의 오류를보고합니다. -

"ABR - 버퍼 오버플로, 배열 색인 'oidsp'가 범위를 벗어날 수 있습니다.정렬 크기 64의 'oidsp'는 인덱스를 사용할 수 있습니다 값 (s) -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;
}
.

아이디어가 있습니까?

도움이 되었습니까?

해결책

뭔가를 누락 할 수 있지만 기능 (check_index_lower_legality)은 'LEN'변수를 수정하지 않으며 배열에 액세스하는 데 사용되는 함수의 리턴이 아니므로 제공된 스 니펫은 런타임을 올바르게 생성하는 것처럼 보입니다.버퍼 언더 플로우 (LEN <0 값).보고서가 정말로 부정확하다고 믿는다면이 예제에서 확장 될 수 있습니까?

감사합니다, Gwyn.

다른 팁

이것은 거짓 버그입니다.Len이 항상> 1인지 알려주는 추가 수표를 추가해야합니다.

이 버그를 건너 뛰는 경우 완전히 원하지 않는 조건을 추가하십시오.

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

이 버그를 잘못된 알람으로 표시하고 Klockworks를 다시 실행할 수 있습니다.그것은 가장 가능성이있는 의미에서 다음 보고서에서 건너 뜁니다.

Klocwork는 이러한 유형의 논리를 따를 수 있다고 생각하지 않습니다.CHECK_INDEX_LOWER_LEGALITY 가이 방법을 작동시키는 것을 알려야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top