我有一個strcpy命令的例子,似乎是緩衝區溢出的風險,但PVS-Studio不會引發警告。在我的示例中,strcpy用於將命令行參數複製到緩衝區中,而不檢查命令行參數的大小。如果參數超過緩衝區的大小,這可能會導致緩衝區溢出。爲什麼一些靜態分析工具不報告潛在的緩衝區溢出?
代碼例如:
char carg1[13];
int main(int argc, char* argv[])
{
// Get name from the 1st command line arg
strcpy(carg1, argv[1]);
…
}
的argv的大小[1]爲應對成carg1之前不作檢查。這不應該引發警告嗎?
實際上,它_is_可以構建一個工具,檢測程序中所有可能的錯誤。只需以非常令人失望的方式簡單地將所有指示標記爲可能存在問題的指示符合該法案。 你不能寫的是一個既正確又完整的分析儀,即。只檢測真正的錯誤,只有那些。爲了克服這種不可能性,靜態分析器在正確的標記(標記所有可能的錯誤,但是在一些代碼上發出潛在的大量虛假警報)或不健全(即,缺少一些錯誤)之間作出選擇。第二類更廣泛。 – byako 2013-02-12 23:13:58
@ BorisYakobowski-絕對。我是在健全的假設下運作的,這在回想起來可能不是很好。感謝您的補充! – templatetypedef 2013-02-13 00:21:26