コンテンツにスキップ

Improper Resource Management (不適切なリソース管理)

ルール ID

MI103

定義

ソフトウェアは、変数、オブジェクト、クラス、属性、関数、実行可能な命令やステートメントなどの動的に管理されるコード リソースの読み取りまたは書き込みを適切に制限していません。

サンプル

次のコードは、CWE の該当コード サンプルの 1 つです。

1
2
3
4
5
6
7
8
void foo(){
BarObj *ptr = new BarObj()
/* do some work with ptr here */

...

free(ptr);
}

このサンプルは、C++ の new 演算子を使用して BarObj を割り当てていますが、その後 free() を使用してオブジェクトを解放しています。これは、予期しない動作につながる可能性があります。プログラマーは、malloc ファミリー関数のいずれかを使用してオブジェクトを作成するか、delete 演算子を使用してオブジェクトを削除するべきでした。

1
2
3
4
5
6
7
8
void foo(){
BarObj *ptr = new BarObj()
/* do some work with ptr here */

...

delete ptr;
}

参考資料

  • Common Weakness Enumeration: CWE-415
  • Common Weakness Enumeration: CWE-416
  • Common Weakness Enumeration: CWE-457
  • Common Weakness Enumeration: CWE-562
  • Common Weakness Enumeration: CWE-590
  • Common Weakness Enumeration: CWE-664
  • Common Weakness Enumeration: CWE-665
  • Common Weakness Enumeration: CWE-704
  • Common Weakness Enumeration: CWE-763