Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

4.3.13 -errsecurity=level

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

level は、次の表に示す値のいずれかでなければいけません。

表 4-5  -errsecurity のフラグ
level の値
意味
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 に設定されます。