2

保守を依頼されたソース コードのチャンクに対して、静的コード分析ツールを実行しました。ツールは、次の状況でエラーを返しました。

n = foo1(k);
if (n == -1)
goto err:
i = foo2(k); // k is a pointer to an integer and is allocated on the heap; i is an integer)
memcpy(x,y, i);

このエラーは、i に -1 の値が割り当てられる可能性があるため、memcpy がエラーを引き起こす可能性があることを示しています (方法の詳細を提供できますが、この問題には関係ありません)。

関数 foo1 と foo2 は両方とも、最初に次のコードを持っています

if (!k)
return -1;

上記の行で、foo2 が呼び出される行に到達した場合、k が null ではないことが保証されます。これが NULL の場合、n は -1 に等しくなり、 foo2 の呼び出し。このコードは、Linux のユーザー空間で実行されるシングル スレッド プロセスの一部であるため、このプロセス以外に、foo1 と foo2 の実行の間に k が指すメモリ空間にアクセスできる人はいないと思います。

4

1 に答える 1