C 言語の一般的なメモリ アプリケーション関数には、malloc()
、realloc()
、# などがあります。 ##calloc()、関数は異なりますが、すべて同じメモリ解放関数
free() に対応します。C でのメモリの適用と解放には、new/delete、new [] が使用されます。 /delete[]メソッド。 C言語であってもC言語であっても、ソースコードを記述する際には、メモリの利用方法の違いに応じてメモリの解放方法を選択し、間違ったメモリ解放を行わないようにする必要があります。例: C/C メモリ割り当て/解放の混合使用、またはスカラー メモリとベクトル メモリ割り当て/解放の混合使用。
脆弱性の概要 | |
---|---|
CVE-2018-14948 | |
CVE-2018-14947 | |
CVE-2018-14946 |
3. サンプル コード
3.1 欠陥コード
上記のコード例では、31 行目は
new[] を使用して作成されています。オブジェクト配列は、34 行目の
delete を使用して解放されます。オブジェクト配列を解放するときに
new[]
delete[]
が存在します。メモリ解放方法が間違っている」問題。コードガードを使用して上記サンプルコードを検出すると、「メモリ解放方法が間違っている」不具合が検出でき、表示レベルは中程度です。図 1 に示すように:
3.2 修復コード
#上記の修復コードで、Samate によって指定された修復方法は次のとおりです。 31 行目の
new[]
を通じてオブジェクト配列を作成し、33 行目で次のコマンドを使用します。
を解除してください。これにより、間違ったメモリ解放方法が回避されます。
Code Guard を使用して修復されたコードを検出すると、「間違ったメモリ解放方法」の欠陥が存在しないことがわかります。図 2 に示すように:
間違ったメモリ解放方法を避けるためには、以下の点に注意する必要があります。
(1) メモリ解放の際は、メモリの適用方法を明確にし、プログラム構造が複雑にならないようにする結果として、間違ったリリース方法が使用されます。
###(2) ソース コードの静的解析ツールを使用すると、この種の問題を効果的に検出できます。 ###以上が[Defect Weekly] 第 31 号: 間違ったメモリ解放の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。