본문 바로가기

Testing Tools/CodeSonar

(2)
Windows에서 HANDLE 사용 관련... 윈도우즈 프로그래밍에서 HANDLE을 리턴하는 함수를 사용시 최근에 봤던 문제점들을 보자.(의외로 많이 봤다.) 아래와 같이 CreateFile을 사용하는 상황에서 제대로 자원이 할당되었다면, 할당된 자원에 대한 HANDLE이 리턴이 될 것이다. Line 7에서는 제대로 할당되지 않았을때를 대비한 방어코드가 들어가 있어서 별 문제가 없는 것처럼 보인다. 하지만, 해당 코드에 대한 분석을 하게 되면, Line 7에서 Redundant Condition과 Line 10에서 Free Null Pointer 오류를 볼 수 있다. 이유는 간단하다. CreateFile이 자원 할당 실패시 NULL을 반환하는게 아니라 INVALID_HANDLE_VALUE(-1로 정의되어 있음.)를 반환하기 때문이다.(MSDN 참조)..
new 메모리 할당 연산자 사용시 유의할 점 C에서 malloc를 사용하여 메모리를 할당할 경우, NULL을 반환하는지 아닌지에 대한 여부로 메모리 할당 성공 여부를 판단하였다. C++에서 new 연산자를 사용하여 할당할 경우, 동일하게 NULL 반환 여부를 판단하는 코드를 작성하여(예시1의 코드와 같이) 정적분석(Codesona 등) 자동화 도구로 분석하면 Redundant Condition과 Unreachable Call의 두가지 오류를 보게 될 것이다.C++에서 new 연산자는 기본적으로 자원할당 실패 시 std::bad_alloc를 발생하고 있기 때문이다.(http://www.cplusplus.com/reference/new/bad_alloc/ 참고) 만약, C에서의 방식대로 NULL 반환여부로 판단하고 싶다면, 예시2) 와 같이 수정하면 ..