このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
putenv ファミリ関数の引数としての自動変数の使用
putenv ファミリ関数の引数はスコープ外からアクセスできない
説明
この欠陥は、putenv
ファミリ関数の引数が自動持続期間をもつローカル変数である場合に発生します。
リスク
関数 putenv(char *string)
は、引数のコピーを作成するのではなく、指定された引数を指すポインターを環境配列に挿入します。引数が自動変数の場合、putenv()
呼び出しを含む関数から値が返された後、メモリが上書きされる可能性があります。その後、別の関数が getenv()
を呼び出した場合、適切にデリファレンスできないスコープ外の変数のアドレスが返されます。このスコープ外の変数は、環境変数が予期しない値を取る、プログラムが応答を停止する、任意のコード実行を可能にする脆弱性を生むなどの原因になる可能性があります。
修正方法
環境変数の設定/設定解除に setenv()
/unsetenv()
を使用します。または、putenv
ファミリ関数の引数と動的に割り当てられたメモリを使用するか、アプリケーションに再入要件がない場合は引数と静的存続期間を使用します。たとえば、再帰や割り込みのないシングルスレッド実行には再入は必要ありません。実行中の呼び出し (再入) はできません。
例
結果情報
グループ: 静的メモリ |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: PUTENV_AUTO_VAR
|
影響度: High |
バージョン履歴
R2017b で導入