작업이 끝난  프로그램소스를  CodeSonar 라는 툴을 사용하여 검사하고 있다.

예전에 이런 툴들의 필요성을 느끼지 않았는데 막상 사용하다보니 생각지도 못한 소스의 오류를 발견하게 된다.

아~ 비싼툴이 좋긴좋구나 라는 생각을 하면서...

하지만 몇개의 짜증나는 오류가 잡히지 않는다. 

 Integer Overflow of Allocation Size

메모리 할당의 크기가 정수형의 크기를 벗어난다고!!!!

이런 에러를 표현하는 이유는 할당하기 전에 할당크기를 검사하지 않았기 때문이다.

(그래도 잡히지 않는  경우가 있어 화가난다   emoticon )

 

오류코드

int array_size = 10;
malloc(array_size * sizeof(int));

정상코드

int array_size = 10;

if (array_size > UINT_MAX / sizeof(int)) return ERROR
malloc(array_size * sizeof(int));
 

아래 소개되는 싸이트에 프로그램 규칙이 나온다

친절하게도 오류코드와 정상코드를 샘플로 보여준다.

 

싸이트 상단오른쪽에 함수를 검색하거나 왼쪽에서 리스트를 찾아서 권고하는 코딩 규칙을 볼 수 있다.

https://buildsecurityin.us-cert.gov/bsi-rules/home.html

 

BSI-site.PNG