小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【cppcheck】(error) Buffer overrun possible for long command line arguments.

はじめに

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を使用してコピーサイズを制限する方法があります。