前の操作によって無効になった環境ポインター
setenv または putenv ファミリ関数の呼び出しによってポインターの参照先の環境が変更されている
説明
この欠陥は、ホスト環境で操作による環境の変更後に、main() の第 3 引数を使用して環境にアクセスした場合に発生します。ホストされている環境では、多くの C 実装で非標準の構文がサポートされます。
main (int argc, char *argv[], char *envp[])
setenv または putenv ファミリ関数の呼び出しにより、*envp の参照先の環境に変更が加えられます。リスク
setenv または putenv ファミリ関数の呼び出しによって環境が変更されると、環境のメモリが再割り当てされる可能性があります。そのホストされている環境のポインターが更新されず、正しくない場所を指す場合があります。このポインターを呼び出すと、予期しない結果が返されたり、プログラムの異常終了が発生したりすることがあります。
修正方法
ホストされている環境のポインターを使用しないようにします。代わりに、グローバル外部変数を使用します。Linux® では environ、Windows® では _environ や _wenviron、またはこれらと同等のグローバル外部変数を使用します。環境を変更すると、これらの変数が更新されます。
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: INVALID_ENV_POINTER |
| 影響度: Medium |
バージョン履歴
R2018a で導入