Rob*_*boy 1 c security static-code-analysis checkmarx
以下功能比使用memcpy安全吗?Memcpy在Checkmarx静态代码分析中给出以下“ Improper_Null_Termination”错误:at行中的字符串被at终止其终止的空字节。但是,如果我使用以下功能,Checkmarx不会出现问题:
void myMemCpy(void *dest, void *src, size_t n)
{
// Typecast src and dest addresses to (char *)
char *csrc = (char *)src;
char *cdest = (char *)dest;
// Copy contents of src[] to dest[]
for (int i=0; i<n; i++)
cdest[i] = csrc[i];
}
Run Code Online (Sandbox Code Playgroud)
使用此函数代替memcpy()是否有任何问题?
以下功能比使用memcpy安全吗?
不,是一样的 最好。
如果有的话,由于代码分析器和编译器知道做什么memcpy(),因此此代码不太安全。
特别是考虑到您通过size_t然后不正确地使用int循环计数器的方式:
void myMemCpy(void *dest, void *src, size_t n)
{
// Typecast src and dest addresses to (char *)
char *csrc = (char *)src;
char *cdest = (char *)dest;
// Copy contents of src[] to dest[]
for (int i=0; i<n; i++)
cdest[i] = csrc[i];
}
Run Code Online (Sandbox Code Playgroud)
在具有32位int和64位的64位体系结构上size_t,如果n其值超过2 gig ,将会严重失败。