C和静态代码分析:这比memcpy安全吗?

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()是否有任何问题?

And*_*nle 6

以下功能比使用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 ,将会严重失败。

  • 您是否对代码进行了任何更改?如果没有,为什么要在答案中重复呢? (3认同)
  • @ 4386427我假设那些其他问题可能是可以解决的,在这种情况下,它与`memcpy()`相同。 (3认同)