界: Code Quality
代码质量不佳会导致不可预测的行为。对于用户来说,通常表现为可用性差。对于攻击者来说,提供了以意外方式对系统施加压力的机会。
Undefined Behavior: File Pointer Use After Close
Abstract
应用程序对已关闭的文件指针使用文件操作。
Explanation
在系统 FILE 对象关联的流关闭后对该对象执行文件操作会导致未定义的行为。根据所使用的具体 C 编译器,文件操作可能会导致系统崩溃,甚至可能导致修改或读取相同或不同的文件。
示例 1:以下代码显示在关闭相应流之后尝试读取系统 FILE 对象。
因为
示例 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
[3] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Rule 22.6
[4] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 6.8.1
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close