界: 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