Oracle Solaris Studio 12.2: C ユーザーガイド

4.3.13 -errsecurity=v

-errsecurity オプションを使用して、コードのセキュリティーに問題がないか検査することができます。

v には、次のいずれかを指定します。

表 4–5 -errsecurity のフラグ

値  

意味  

core 

このレベルでは、たいていの場合で安全でない、または検査することの難しいソースコードの構文がないかどうかを検査します。このレベルで行われる検査には次のものがあります。 

  • printf() および scanf() 系の関数での変数書式文字列の使用

  • scanf() 関数における非結合文字列 (%s) 形式の使用

  • 安全な使用法のない関数の使用: gets()cftime()ascftime() creat()

  • O_CREAT と組み合わせた open() の不正使用

    このレベルで警告が生成されるソースコードはバグと考えてください。問題のコードを変更することを推奨します。どんな場合でも、単純明快でより安全な別の方法があります。

standard 

このレベルの検査には、core レベルの検査に加えて、安全かもしれないが、より良い別の方法がある構文の検査があります。新しく作成したコードの検査には、このレベルを推奨します。このレベルで追加される検査には、次のものがあります。 

  • strlcpy() 以外の文字列コピー関数の使用

  • 脆弱な乱数関数の使用

  • 安全でない関数を使った一時ファイルの生成

  • fopen() を使ったファイルの作成

  • シェルを呼び出す関数の使用

    このレベルで警告を生成するソースコードは、新しいコードまたは大幅に修正したコードに書き換えてください。従来のコードに含まれるこうした警告に対処することと、アプリケーションを不安定にするリスクとのバランスを検討してください。

extended 

このレベルでは、core および standard レベルの検査を含む完全な検査が行われます。また、状況によっては安全でない可能性がある構文について、多数の警告が生成されます。このレベルの検査は、コードを見直す際の一助になりますが、許容しうるソースコードが守る必要のある基準と考える必要はありません。このレベルで追加される検査には、次のものがあります。 

  • ループ内での getc() または fgetc() の呼び出し

  • パス名競合になりがちな関数の使用

  • exec() 系の関数の使用

  • stat() とほかの関数との間の競合

    このレベルで警告が生成されるコードを見直して、安全上の潜在的な問題があるかどうかを判定することができます。

%none 

-errsecurity 検査を無効にします。

-errsecurity の値が指定されていない場合は、-errsecurity=%none に設定されます。-errsecurity は指定されているが、引数が指定されていない場合は、-errsecurity=standard に設定されます。