UNUSED.FUNC.STL_EMPTY

STL オブジェクトの empty() メソッドの無視される戻り値

呼び出しからの戻り値が無視される場合、UNUSED.FUNC.STL_EMPTY チェッカーは、標準の C++ コンテナクラスの empty() メソッドに対する呼び出しのインスタンスを検出して報告します。

脆弱性とリスク

標準ライブラリの C++ コンテナは、一般に 2 つの別個のメソッド、clear() と empty() を実装します。clear() メソッドはコンテナのコンテンツを消去するもので、empty() メソッドはコンテナに要素が 1 つ以上含まれるかどうかをチェックします。この 2 つのメソッドを取り違えると、見つけにくい重大なアルゴリズムバグを引き起こす可能性があります。empty() メソッドは、チェックの結果が格納されるブール値を返します。この値を無視するのは疑わしく、呼び出されるメソッド名の選択の誤りと判断される可能性があります。

脆弱コード例

次のコードでプログラマーが意図したことは、コンテナのコンテンツの消去です。しかし実際には、コンテナが空であるかどうかをチェックする empty() メソッドが呼び出されました。

コピー
   void foo(std::vector<MyType>& v)
   {
       /* ...*/
       v.empty();    // return value is ignored, indicating a logical mistake
   }

この例では、Klocwork は式 'v.empty()' を UNUSED.FUNC.STL_EMPTY の欠陥として報告します。

修正コード例

修正コード例では、プログラマーは clear() メソッドを正しく呼び出しています。

コピー
   void foo(std::vector<MyType>& v)
   {
       /* ...*/
       v.clear();
   }

関連チェッカー