はじめに
C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。
(error) Buffer overrun possible for long command line arguments.
cppcheckのバージョン
- v1.65
サンプルプログラム
以下のソースプログラムを解析にかけると表示されます。
#include "stdafx.h" #include <windows.h> int main(int argc, char *argv[]) { char buf[20] = {0}; strcpy(buf, argv[1]); //->(error) Buffer overrun possible for long command line arguments. //strncpy(buf, argv[1], sizeof(buf)); printf("%s", buf); return 0; }
上記のように、変数bufに引数をそのままコピーしようとした場合に、長いコマンドの場合にバッファオーバする可能性があるよという警告です。
回避策は、strncpyを使用してコピーサイズを制限する方法があります。