メインコンテンツ

Bug Finder 欠陥グループ

便宜上、Bug Finder の欠陥チェッカーはさまざまなグループに分類されています。

このトピックでは、さまざまなグループの概要を説明します。

C++ の例外

これらの欠陥は C++ 例外処理に関連しています。欠陥には次のものがあります。

  • 関数 noexcept から発生する未処理例外

  • throw ステートメントの引数オブジェクトの構築中に発生する予期せぬ例外

  • 参照ではなく値による例外をキャッチする catch ステートメント

  • 後続の catch ステートメントを隠す catch ステートメント

具体的な欠陥についての詳細は、C++ の例外の欠陥を参照してください。

コマンド ライン パラメーター: cpp_exceptions

同時実行

これらの欠陥はマルチタスキング コードに関連しています。

データ レースの欠陥

データ レースの欠陥は、複数のタスクが保護されていない共有変数を操作する場合、または保護されていない再呼び出し不可能な標準ライブラリ関数を呼び出す場合に発生します。

具体的な欠陥については、同時実行の欠陥を参照してください。

コマンド ライン パラメーター: concurrency

ロックの欠陥

ロックの欠陥はクリティカル セクションが適切に設定されていないときに発生します。以下に例を示します。

  • クリティカル セクションがデッドロックに関連している。

  • ロック関数に対応するロック解除関数がない。

  • ロック関数が、ロック解除関数の中間呼び出しなしで 2 回呼び出されている。

クリティカル セクションは同時アクセスから共有変数を保護します。Polyspace® ではクリティカル セクションは特定の形式に準拠する必要があります。クリティカル セクションはロック関数およびロック解除関数の呼び出しの間に配置されなければなりません。

具体的な欠陥については、同時実行の欠陥を参照してください。

コマンド ライン パラメーター: concurrency

暗号化

これらの欠陥は OpenSSL ライブラリの暗号化ルーチンの不適切な使用に関連しています。次に例を示します。

  • 暗号化の脆弱なアルゴリズムの使用

  • 暗号キーや暗号初期化ベクトルなどの基本要素の欠如

  • 不適切な順序の暗号化操作

これらのチェッカーでは、OpenSSL ライブラリ バージョン 1.1.1 までをサポートしていることに注意してください。

具体的な欠陥については、暗号化の欠陥を参照してください。

コマンド ライン パラメーター: cryptography

データ フロー

これらの欠陥は、コード内で情報がどのように移動するかに関係するエラーです。欠陥には次のものがあります。

  • デッド コード (到達不能コード)

  • 未使用コード

  • 初期化されていない情報

具体的な欠陥については、データ フローの欠陥を参照してください。

コマンド ライン パラメーター: data_flow

動的メモリ

これらの欠陥は、メモリが動的に割り当てられた場合のメモリ使用法に関係するエラーです。欠陥には次のものがあります。

  • 動的に割り当てられたメモリの解放

  • 保護されていないメモリ割り当て

具体的な欠陥については、動的メモリの欠陥を参照してください。

コマンド ライン パラメーター: dynamic_memory

適切な手法

これらの欠陥により、コーディング手法の適切さが保たれます。欠陥は、それ自体がクラッシュを発生しなくても、より深刻な論理エラーをコード内で強調表示することもあります。欠陥により、攻撃に対するコードの脆弱性が検出され、保守が難しい場合もあります。

欠陥には次のものがあります。

  • ハード コードされた定数 (バッファー サイズやループ境界など)

  • 未使用の関数パラメーター

具体的な欠陥については、適切な手法の欠陥を参照してください。

コマンド ライン パラメーター: good_practice

数値

これらの欠陥は、コード内の変数に関係するエラー (変数の値、データ型、使用法) です。欠陥には次のものがあります。

  • 数学的演算

  • 変換のオーバーフロー

  • 演算のオーバーフロー

具体的な欠陥については、数値的欠陥を参照してください。

コマンド ライン パラメーター: numerical

オブジェクト指向

これらの欠陥は C++ プログラミングのオブジェクト指向の側面に関連しています。この欠陥では、クラスの設計での問題や継承階層における問題が強調表示されます。

欠陥には次のものがあります。

  • データ メンバーがコンストラクター内で初期化されないか不適切に初期化される

  • 基底クラスのメソッドが不適切にオーバーライドされる

  • データのカプセル化が破壊される

具体的な欠陥については、オブジェクト指向の欠陥を参照してください。

コマンド ライン パラメーター: object_oriented

パフォーマンス

これらの欠陥チェッカーは、パフォーマンスの問題の直接的な原因となるか、あるいはパフォーマンスの問題につながる特定のコード パターンを検出します。欠陥を修正することでパフォーマンスの問題が直接解消されるか、パフォーマンスの問題を後で引き起こす可能性のある要因が除去されます。

これらのチェッカーでは、コンパイラの最適化では修正できない欠陥を特定できます。コンパイラの最適化では、既存のコードのパフォーマンス向上が試みられますが、言語ルールの範囲内で行う必要があり、開発者の意図を推測できません。それとは対照的に、これらのチェッカーは次の状況が当てはまる問題を検出できます。

  • 現在の使用方法を、機能を変更することなく、より効率的なコード パターンで置き換えることができるが、そのコード パターンは言語ルールで必要とされていない。

    たとえば、移動コンストラクターや移動代入演算子が含まれていないクラスの空のデストラクターには、チェッカーによってフラグが設定されます。空のデストラクターは C++ 言語ルールでは許容されていますが、これにより移動演算子の自動生成が妨げられます。このデストラクターを削除することにより、機能を変更することなく、コンパイラで生成されるデストラクター (および移動演算子) を許容して、コードを効率化できます。

  • 複数の同様の実装が存在し、要件に応じて開発者がより効率的な実装を選択できる。

    たとえば、I/O 操作での std::endl の使用には、チェッカーによってフラグが設定されます。std::endl\n は両方とも新しい行を導入しますが、フラッシュが意図されていない場合は後者のほうが効率的です。

これらの欠陥が修正されると、ソース コードが効率化されるか、開発者の意図がより明示的になるため、コンパイラがよりアグレッシブにコードを最適化できます。

欠陥には次のものがあります。

  • 移動操作の代わりに誤ってコピーを引き起こす問題

  • 非効率または不必要な一時変数の作成

  • より効率の良い代替手段がある可能性がある関数の使用

具体的な欠陥については、パフォーマンスの欠陥を参照してください。

コマンド ライン パラメーター: performance

プログラミング

これらの欠陥は、プログラミング構文に関係するエラーです。欠陥には次のものがあります。

  • 代入と等号演算子

  • 変数修飾子または宣言の不一致

  • 形式が正しくない文字列

具体的な欠陥については、プログラミングの欠陥を参照してください。

コマンド ライン パラメーター: programming

リソース管理

これらの欠陥はファイル処理に関連しています。欠陥には次のものがあります。

  • ファイル ストリームが閉じない

  • ファイル ストリームが閉じた後に操作される

具体的な欠陥については、リソース管理の欠陥を参照してください。

コマンド ライン パラメーター: resource_management

静的メモリ

これらの欠陥は、メモリが静的に割り当てられた場合のメモリ使用法に関係するエラーです。欠陥には次のものがあります。

  • 配列の境界外へのアクセス

  • null ポインター

  • ポインターのキャスト

具体的な欠陥については、静的メモリの欠陥を参照してください。

コマンド ライン パラメーター: static_memory

セキュリティ

これらの欠陥では、ハッキングなどのセキュリティ攻撃に対して脆弱性のあるコード内の場所が強調表示されます。多くの場合、これらの欠陥によりランタイム エラーが発生することはありませんが、代わりにコード内のリスクのある領域が示されます。欠陥には次のものがあります。

  • 機密データの管理

  • 危険な関数や旧式の関数の使用

  • 乱数の発生

  • パスやコマンドの外部制御

具体的な欠陥についての詳細は、セキュリティの欠陥を参照してください。

コマンド ライン パラメーター: security

汚染されたデータ

これらの欠陥では、セキュリティで保護されないソース由来のコード内の要素が強調表示されます。攻撃者が入力データやパスを利用してプログラムを攻撃し、欠陥を引き起こすおそれがあります。これらの欠陥では、コード内の脆弱性のある要素が強調表示されます。欠陥には次のものがあります。

  • 汚染された変数やポインターの使用

  • パスの外部制御

具体的な欠陥についての詳細は、汚染されたデータの欠陥を参照してください。汚染されたデータの欠陥に対する動作は、オプション コマンド -consider-analysis-perimeter-as-trust-boundary を使用して変更できます。-consider-analysis-perimeter-as-trust-boundary を参照してください。

コマンド ライン パラメーター: tainted_data

参考

トピック