소프트웨어 개발(SW Dev)/Rule(CERT C)
CERT C - ENV 규칙 목록
flowhistory
2024. 11. 15. 22:02
ENV
Environment (ENV) - 환경
프로그램의 환경과 관련된 내용을 다루는 카테고리입니다.
특정 함수의 반환 값으로 참조된 객체를 수정하지 말 것과 같은 프로그램의 안전성과 신뢰성을 높이기 위한 규칙이 포함되어 있습니다.
Rule Number |
Rule Definition | 설명 |
ENV32-C | 모든 종료 핸들러(exit handler)는 정상적으로 반환해야 합니다. | C 표준은 응용 프로그램을 정상적으로 종료시키는 3가지 함수를 제공합니다. _Exit(), exit(), quick_exit(). 이러한 함수들은 종합적으로 종료 함수라고 불립니다. exit() 함수가 호출되거나 main() 진입점 함수에서 제어가 전달될 때, atexit()에 등록된 함수들이 호출됩니다(at_quick_exit()은 호출되지 않음). quick_exit() 함수가 호출될 때, at_quick_exit()에 등록된 함수들이 호출됩니다(atexit()은 호출되지 않음). 이러한 함수들을 종합적으로 종료 핸들러라고 합니다. _Exit() 함수가 호출될 때, 종료 핸들러나 시그널 핸들러가 호출되지 않습니다. 종료 핸들러는 반환하여 종료해야 합니다. 모든 종료 핸들러가 정리 작업을 수행할 수 있도록 허용하는 것은 중요하며 잠재적으로 안전에 중요합니다. 이는 지원 라이브러리에 의해 설치된 핸들러에 대해 어플리케이션 프로그래머가 항상 알지 못하기 때문에 특히 중요합니다. 두 가지 특정 문제점은 종료 함수에 중첩된 호출 및 longjmp를 호출하여 종료 핸들러를 종료하는 것입니다. 종료 함수에 중첩된 호출은 정의되지 않은 동작입니다. (정의되지 않은 동작 182번 참조). 이 동작은 종료 핸들러에서 종료 함수가 호출되었을 때 또는 시그널 핸들러 내부에서 종료 함수가 호출되었을 때만 발생할 수 있습니다. (SIG30-C 참조. 시그널 핸들러 내에서 비동기 안전한 함수만 호출). atexit()로 등록된 함수의 호출을 종료할 longjmp() 함수 호출이 만들어진 경우, 동작은 정의되지 않습니다. |
728x90