エラー: strncat-param-overlap
Address Sanitizer のエラー: strncat-param-overlap
重複するバッファー内のメモリを移動するコードが原因で、診断が困難なエラーが生じる可能性があります。
例
この例では、CRT 関数に対するパラメーターが重複することによって生じるエラーを AddressSanitizer がいかにしてキャッチするかを示します。
(llvm-project/compiler-rt/test/asan/TestCases/strncat-overlap.cpp に基づく)
// example1.cpp
// strncat-param-overlap error
#include <string.h>
void bad_function() {
char buffer[] = "hello\0XXX";
strncat(buffer, buffer + 1, 3); // BOOM
return;
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
この例をビルドしてテストするには、Visual Studio 2019 バージョン 16.9 以降の開発者コマンド プロンプトで次のコマンドを実行します。
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
結果のエラー
関連項目
AddressSanitizer の概要
AddressSanitizer の既知の問題
AddressSanitizer のビルドと言語リファレンス
AddressSanitizer ランタイム リファレンス
AddressSanitizer シャドウ バイト
AddressSanitizer クラウドまたは分散テスト
AddressSanitizer デバッガーの統合
AddressSanitizer エラーの例