계: Code Quality

코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.

Undefined Behavior: File Pointer Use After Close

Abstract
이 응용 프로그램은 닫힌 파일 포인터에 대한 파일 작업을 사용합니다.
Explanation
연관된 스트림이 닫힌 후 시스템 FILE 개체에 대해 파일 작업을 수행하면 정의되지 않은 동작이 발생합니다. 사용 중인 특정 C 컴파일러에 따라, 파일 작업으로 인해 시스템 충돌이 발생할 수 있습니다. 심지어 같은 파일 또는 다른 파일을 수정하거나 읽을 가능성도 있습니다.

예제 1: 다음 코드는 해당 스트림이 닫힌 후 시스템 FILE 개체를 읽으려는 시도를 보여줍니다.


FILE *sysfile = fopen(test.file, "r+");
res = fclose(sysfile);
if(res == 0){
printf("%c", getc(sysfile));
}
getc() 함수는 sysfile에 대한 파일 스트림이 닫힌 후에 실행되므로 getc()는 정의되지 않은 동작으로 이어져 시스템 충돌을 일으킵니다. 심지어 같은 파일 또는 다른 파일을 수정하거나 읽을 가능성도 있습니다.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 910
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 22.6
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close