3

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;
}

どうすれば脆弱性を修正できますか? それらの脆弱性は正しくスローされていますか? 同じ関数でメモリを割り当てて削除する必要がありますか?

4

1 に答える 1