Bug Finder チェッカーを使用した非推奨の関数または安全でない関数、キーワード、またはマクロのフラグ設定
このトピックでは、禁止されている関数、キーワード、またはマクロのカスタム リストを作成し、Polyspace® Bug Finder™ を使用してコード内でのそれらの項目の使用をチェックする方法について説明します。
チェッカーの拡張が必要かどうかの特定
チェッカーを作成または拡張する前に、既存のチェッカーが要件を満たしているかどうかを特定します。たとえば、これらのチェッカーは、次のような特定の関数の使用にフラグを設定します。
危険な標準関数を使用しています
:チェッカーは、バッファー オーバーフローのリスクがあり、より安全な代替方法がある関数にフラグを設定します。旧式の標準関数が使用されています
:チェッカーは、C/C++ 標準で非推奨になっている関数にフラグを設定します。安全でない標準暗号化関数
、安全でない標準関数
:チェッカーは、セキュリティ上重要なコンテキストで使用される安全でない関数にフラグを設定します。string 長の計算が非効率的です
、std::endl によって不要なフラッシュが生じることがあります
:チェッカーは、パフォーマンスに影響を与える可能性があり、より効率的な代替方法がある関数にフラグを設定します。
ただし、既存のチェッカーの対象とならない関数をブロックする必要がある場合があります。たとえば、std::signal
などの信号処理関数の使用を禁止する場合です。
#include <csignal>
#include <iostream>
namespace
{
volatile std::sig_atomic_t gSignalStatus;
}
void signal_handler(int signal)
{
gSignalStatus = signal;
}
int main()
{
// Install a signal handler
std::signal(SIGINT, signal_handler);
std::cout << "SignalValue: " << gSignalStatus << '\n';
std::cout << "Sending signal " << SIGINT << '\n';
std::raise(SIGINT);
std::cout << "SignalValue: " << gSignalStatus << '\n';
}
同様に、既存のチェッカーにより禁止されていないキーワードをブロックする必要がある場合があります。
チェッカーの拡張
ブロックリストに登録する関数、キーワード、またはマクロが既存のチェッカーの対象ではない場合は、次の 1 つ以上のチェッカーを使用します。
チェッカー用のブロックリストを作成するには、次のようにします。
特定の構文で XML ファイル内の関数、キーワード、およびマクロを列挙します。
テンプレート ファイル
code-behavior-specifications-template.xml
をフォルダー
から書き込み可能な場所にコピーし、そのファイルを変更します。polyspaceroot
\polyspace\verifier\cxx以下の構文を使用して、ファイル内の禁止されている各関数を既存の同様のエントリの後ろに入力します。
ここで、<function name="funcname"> <behavior name="FORBIDDEN_FUNC"/> </function>
は、ブロックリストに追加する関数の名前です。警告を回避するため、ファイル内の既存のエントリは削除してください。funcname
以下の構文を使用して、ファイル内の各キーワードを既存の同様のエントリの後ろに入力します。
ここで、<token name="keywordname" kind="keyword"> <behavior name="FORBIDDEN_KEYWORD"/> </token>
は、ブロックするキーワードの名前です。keywordname
以下の構文を使用して、ファイル内の各マクロを既存の同様のエントリの後ろに入力します。
ここで、<token name="macroname" kind="macro"> <behavior name="FORBIDDEN_MACRO"/> </token>
は、ブロックリストに追加するマクロの名前です。macroname
関数とキーワードには
*
ワイルドカードを使用できますが、マクロには使用できません。たとえば、名前にDEBUG
を含むすべての関数を禁止するには、次のように入力できます。マクロの指定で正規表現を使用するには、追加の属性<function name="*DEBUG*"> <behavior name="FORBIDDEN_FUNC"/> </function>
regex
をtrue
に設定します。たとえばDEFINED_
で始まるすべてのマクロを禁止するには、次のように入力します。<token name="DEFINED_.*" kind="macro" regex="true"> <behavior name="FORBIDDEN_MACRO"/> </token>
この XML ファイルをオプション
[-code-behavior-specifications]
の引数として指定します。
拡張可能なチェッカー
このような方法で以下のチェッカーを拡張できます。
参考
-code-behavior-specifications
| 禁止された関数の使用
| 禁止されたキーワードの使用
| 禁止されたマクロの使用