checkmarx ツールによって差し引かれる脆弱性を修復しようとしています。以下は、現在取り組んでいるプロジェクトに似たサンプル コードで、スタック変数でメモリ リークとメモリの解放が発生しています。
メモリは呼び出された関数で割り当てられ、Main 関数で削除されます。
メイン関数に sum が割り当てられている場合、スタック変数でメモリ リークやメモリが解放されることはありません。しかし、割り当て前にポインター変数のサイズを決定するために他の変数を使用する実際のコードでは、同じことを行うことができませんでした。
void addition(int *a, int *b, int** sum)
{
*sum = new int[2]; //MEMORY LEAK is thrown here
if (*sum)
{
for (int i = 0; i < 2; i++)
{
cout << "Enter two numbers: " <<endl;
cin >> a[i] >> b[i];
(*sum)[i] = a[i] + b[i];
cout << "sum:" << (*sum)[i] << endl;
}
}
}
int main()
{
int* p1 = NULL;
p1=new int[2];
int* p2 = NULL;
p2 =new int[2];
int *sum = NULL; //MemoryFree_On_StackVariable is thrown here
addition(p1 ,p2, &sum);
for (int i = 0; i < 2; i++)
{
cout << "sum is " << sum[i] << endl;
}
if (p1)
{
delete[] p1;
p1 = NULL;
cout << "p1 is deleted" <<endl;
}
if (p2)
{
delete[] p2;
p2 = NULL;
cout << "p2 is deleted" <<endl;
}
if (sum != NULL)
{
delete[] sum;
sum = NULL;
cout << " sum is deleted" << endl;
}
return 0;
}
どうすれば脆弱性を修正できますか? それらの脆弱性は正しくスローされていますか? 同じ関数でメモリを割り当てて削除する必要がありますか?