ex. 메모리 동적 할당 → 대부분 "예외처리"
malloc, calloc, new 등
ex. #define 매크로상수 및 함수 금지 → "수정" or "예외처리"(多)
#define MAX 1024 → (const 형으로 변경) const int max = 1024;
but 주로 "예외처리"
define 속도가 더 빠르고, 변수가 많은 경우가 대부분이기 때문
ex. const가 아닌 핸들 반환 금지
return (주소를 통해 변경 가능)
(1) 지역 변수를 넘겨주기
(2) getsetter 사용
ex. 라이브러리 함수 일부 사용 금지 strcpx 등
(1) 대체가능한 라이브러리 함수 사용 strncpy
(2) 라이브러리 함수 사용 결과와 같은 알고리즘 함수 직접 구현
(3) "예외처리" (보고서 사유: 해당 함수들 사이즈가 동일하다 ~)
ex. 위배 빈도가 높은 규칙들
- else 삽입
if{ } // 삽입 안해도 ok
if{ } else if{ } else{ //else 무조건 삽입 }
- == 연산자 사용 불가
pi == 3.14 → pi <= 3.14
- 한 줄에 한 구문만
int a = 0; b=0; → int a = 0; int b = 0;
- basic numerical type 사용 불가
int → int32_t //signed 경우 → UINT32_t //unsigned 경우
- void형 이외엔 모두 return 값 필수
(1) (void) 캐스팅 (2) return 명시
- 만들어진 함수
window, visual studio 등 만들어진 함수 → "예외처리"
→ 현재 대부분 "예외처리"
ex. 한 함수안에 실행가능한 코드 200줄 이상 시, 오류 복잡도 20 이상 시, 오류 (복잡도 x, 가독성 o)
CWE 658(C) / 659(C++) / 660(Java)
Buffer_Overrun/Underrun 등 → "예외처리"ex. runtime error (메모리 할당 오류, null 포인터 참조로 인한 die, 수학 연산식 내 0으로 나누기, 분모가 0 등)