在我的代码中,使用flawfinder
工具,对memset
的所有调用都显示为警告。
在最简单的情况下,它可以归结为
float f1;
float f2;
void* p1 = &f1;
void* p2 = &f2;
memcpy(p1, p2, sizeof(float));
消息是
./file.cpp:10: [2] (buffer) memcpy:
Does not check for buffer overflows when copying to destination (CWE-120).
Make sure destination can always hold the source data.
我完全理解这可以用一个简单的副本来代替,这只是一个简化的例子。我还了解使用memcpy和缓冲区溢出的潜在问题。
问题是flawfinder到底要我在这里做什么
也许是添加assert
之类的东西?(这并没有抑制警告(
assert( sizeof(*p1) == sizeof(*p2) );
memcpy(p1, p2, sizeof(float));
还是它只是告诉我不要使用memset
?
我是用C++编程的,但我很确定这个问题和解决方案对C和C++语言都是通用的。
errno_t err = memcpy_s(dest, dsize, src, cnt);
这应该是"安全"的版本,有望满足flawfinder